Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ID des nächsten gefundenen Eulerkreises
- eulerCircleID = 0;
- // Zuordnung von Person -> zugehöriger Eulerkreis
- eulerCircles = new Hashtable();
- // Liste aller Personen auslesen
- persons = getPersonList();
- // Schleife über alle Personen
- for(int i = 0; i < persons.length; i++) {
- // Person auslesen
- person = persons.get(i);
- // Wenn diese Person nicht bereits in einem Eulerkreis enthalten ist ...
- if(!eulerCircles.contain(person)) {
- // Eulerkreis für diese Person finden
- eulerCircle = findEulerCircle(person);
- // Wenn für diese Person ein Eulerkreis gefunden wurde ...
- if(eulerCircle != null) {
- // Schleife über alle Personen des Eulerkreises
- for(int k = 0; k < eulerCircle.length; k++) {
- // Person auslesen
- eulerPerson = eulerCircle.get(k);
- // Person mit ID zu Eulerkreis hinzufügen
- eulerCircles.add(eulerPerson, eulerCircleID);
- }
- // ID des nächsten gefundenen Eulerkreises um 1 erhöhen
- eulerCircleID++;
- }
- }
- }
- // Anzahl Eulerkreise ausgeben
- sysout("Anzahl Eulerkreise: " + eulerCircleID);
- // Schleife über alle Eulerkreis IDs
- for(int i = 0; i < eulerCircleID; i++) {
- // Ring-ID ausgeben
- sysout("Ring " + i + ":");
- // Schleife über alle Personen die in den Eulerkreisen sind
- for(int k = 0; k < eulerCircles; k++) {
- // Person auslesen
- eulerPerson = eulerCircles.get(k);
- // Wenn diese Person in aktuellem Eulerkreis enthalten ist ...
- if(eulerPerson.getValue() == i) {
- // Person ausgeben
- sysout(eulerPerson);
- }
- }
- }
- /***********************************************/
- // Eulerkreis finden
- private LinkedList<Person> findEulerCircle(Person start) {
- // Leere Liste anlegen
- eulerCircle = new LinkedList<Person>();
- // Anfangsknoten einfügen
- eulerCircle.add(start);
- // Eulerkreis finden
- return findEulerCircle(eulerCircle);
- }
- // Eulerkreis finden
- private LinkedList<Person> findEulerCircle(LinkedList<Person> eulerCircle) {
- // Letzten Knoten herausfinden
- start = eulerCircle.getLast();
- // Alle Freunde des letzten Knotens auslesen
- friends = getFriendList(start);
- // Schleife über alle Freunde
- for(int k = 0; k < friends.length; k++) {
- // Freund auslesen
- friend = friends.get(k);
- // Wenn beide miteinander befreundet sind ...
- if(areFriends(friend, start)) {
- // Leere Liste anlegen
- tempEulerCircle = new LinkedList<Person>();
- // Neuen Knoten hinzufügen
- tempEulerCircle.add(friend);
- // Eulerkreis finden
- tempEulerCircle = findEulerCircle(tempEulerCircle);
- // Wenn Eulerkreis gefunden wurde ...
- if(tempEulerCircle != null) {
- // Eulerkreis speichern
- eulerCircle = tempEulerCircle;
- // Eulerkreis zurückgeben
- return eulerCircle;
- }
- }
- //
- if(eulerCircle.length > 0 && friend == eulerCircle.get(0)) {
- if(eulerCircle.length == 1) {
- return null;
- }
- else {
- return eulerCircle;
- }
- }
- }
- }
- /***********************************************/
- private boolean areFriends(Person p1, Person p2) {
- friends = getFriendList(p1);
- for(int k = 0; k < friends.length; k++) {
- friend = friends.get(k);
- if(friend == p2) {
- return true;
- }
- }
- return false;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement