A
Antonine
Gast
Hallo,
ich möchte in einem Graphen-Programm mit gerichteten Graphen gern eine Tiefensuche durchführen. Dazu habe ich Methoden geschrieben, die zunächst alle funktionieren. Sobald ich den Graph jedoch in einer Datei abspeichere und anschließend wieder lade, wird mir in einigen Fällen angezeigt, dass zwischen 2 Knoten kein Weg vorhanden ist, obwohl es diesen gibt. Leider sehe ich den Fehler nicht, vielleicht könnt ihr mir da weiterhelfen?
Vielen Dank für eure Hilfe!!
ich möchte in einem Graphen-Programm mit gerichteten Graphen gern eine Tiefensuche durchführen. Dazu habe ich Methoden geschrieben, die zunächst alle funktionieren. Sobald ich den Graph jedoch in einer Datei abspeichere und anschließend wieder lade, wird mir in einigen Fällen angezeigt, dass zwischen 2 Knoten kein Weg vorhanden ist, obwohl es diesen gibt. Leider sehe ich den Fehler nicht, vielleicht könnt ihr mir da weiterhelfen?
Java:
/**
* Führt eine Tiefensuche von einem Start- zu einem Zielknoten durch. Dabei wird
* zunächst geprüft, ob die Knoten gleich sind, da in diesem Fall kein Weg vorhanden
* sein kann. Ansonsten wird der jeweils kürzeste Weg zurückgegeben bzw. angegeben,
* dass kein Weg existiert.
* @param from - Startknoten
* @param to - Endknoten
* @return Knoten gleich, kein Weg gefunden oder Weg gefunden
*/
public boolean deepSearch(Node from, Node to) {
if (from.equals(to)) {
JOptionPane.showMessageDialog(null, "Start- und Zielknoten sind gleich.");
return false;
}
Stack<String> path = new Stack<String>();
Stack<String> foundPath = new Stack<String>();
helpDeepSearch(from, to, path, foundPath);
if(foundPath.size() == 0) {
JOptionPane.showMessageDialog(null, "Zwischen den Knoten ist kein Weg vorhanden.");
return false;
}
ArrayList<String> list = new ArrayList<String>();
list.add(from.getValue().toString());
list.addAll(foundPath);
JOptionPane.showMessageDialog(null, "Kürzester Weg von Knoten " + from.getValue().toString() + " zu Knoten " + to.getValue().toString() + "\nist: " + list + ".");
return true;
}
/**
* Hilfsmethode für die Tiefensuche, die den jeweils kürzesten Weg von einem
* Start- zu einem Zielknoten ermittelt.
* @param current - aktueller Knoten
* @param to - Zielknoten
* @param path - Weg
* @param foundPath - Ergebnisweg
*/
private void helpDeepSearch(Node current, Node to, Stack<String> path, Stack<String> foundPath) {
if(current.equals(to)) {
if(foundPath.isEmpty() || path.size() < foundPath.size()) {
foundPath.clear();
foundPath.addAll(path);
}
}
HashSet<Node> nodes = getSuccNodes(current);
for (Node node : nodes) {
path.push(node.getValue().toString());
helpDeepSearch(node, to, path, foundPath);
path.pop();
}
}
Vielen Dank für eure Hilfe!!