Nunja, es geht primär darum alle Wege in von einem Startknoten zu dem besagten Endknoten zu finden. Ich hab hier meinen rekursiven Ansatz, nur irgendwie funktioniert der nicht so ganz richtig wie er soll.
Naja zum Code selbst
Der Graph ist gerichtet
Kanten sind über eine Hashmap<T, HashSet<T>> implementiert
Die Idee ist über eine ForEach Schleife alle verfügbaren Zielknoten vom jeweiligen Standpunkt aus zu abzulaufen und halt cycle's zu vermeiden. Erfolgreich gefundene Pfade sollen in einer List<List<T> gespeichert werden.
Mein Problem ist, dass er a) immer nur einen Pfad findet und b) ist es nicht immer der gleiche Oo
Ab und an hängt er auch mal nen Knoten an den Pfad, obwohl keine Kante dahin führt.
Hat irgendwer ne Idee was falsch gelaufen sein könnte?
Ich vermute ich mach einen Denkfehler bei der Rekursion, aber hab keine Ahnung ob ich damit richtig liege und wie ichs anders machen könnte.
Wäre Dankbar für jedwede Hilfe =)
[Java]
private void RecursiveAllPathSearch(T CurrentNode, T endNode, ArrayList<T> path){
if (path.contains(CurrentNode)){ // cycle's abfangen
path = null;
}
else {
if (CurrentNode == endNode){ //erfolgreichen path speichern
path.add(CurrentNode);
paths.add(path);
}
else {
path.add(CurrentNode); // weiter "forschen" -> rekursiv
HashSet<T> NextNodes = edges.get(CurrentNode);
for(T elements : NextNodes){
RecursiveAllPathSearch(elements, endNode, path);
}
}
}
}
[Java]
Naja zum Code selbst
Der Graph ist gerichtet
Kanten sind über eine Hashmap<T, HashSet<T>> implementiert
Die Idee ist über eine ForEach Schleife alle verfügbaren Zielknoten vom jeweiligen Standpunkt aus zu abzulaufen und halt cycle's zu vermeiden. Erfolgreich gefundene Pfade sollen in einer List<List<T> gespeichert werden.
Mein Problem ist, dass er a) immer nur einen Pfad findet und b) ist es nicht immer der gleiche Oo
Ab und an hängt er auch mal nen Knoten an den Pfad, obwohl keine Kante dahin führt.
Hat irgendwer ne Idee was falsch gelaufen sein könnte?
Ich vermute ich mach einen Denkfehler bei der Rekursion, aber hab keine Ahnung ob ich damit richtig liege und wie ichs anders machen könnte.
Wäre Dankbar für jedwede Hilfe =)
[Java]
private void RecursiveAllPathSearch(T CurrentNode, T endNode, ArrayList<T> path){
if (path.contains(CurrentNode)){ // cycle's abfangen
path = null;
}
else {
if (CurrentNode == endNode){ //erfolgreichen path speichern
path.add(CurrentNode);
paths.add(path);
}
else {
path.add(CurrentNode); // weiter "forschen" -> rekursiv
HashSet<T> NextNodes = edges.get(CurrentNode);
for(T elements : NextNodes){
RecursiveAllPathSearch(elements, endNode, path);
}
}
}
}
[Java]