|
Neue Wiki Eintrage finden Sie unter easy-coding.de/wiki.
azyklisch.java boolean acyclic(Graph g) {
Map<String, Status> visited = new TreeMap<String, Status>();
for (Iterator<String> it = g.nodeIterator(); it.hasNext(); ) {
if (!visited.containsKey(n))
if (!acyclicRek(g, n, visited))
return false;
}
return true;
}
boolean acyclicRek (Graph g, String node, Map<String, Status> visited ) {
visited.put(node, Status.start); // Start Knoten expandieren
for (Iterator<String> it = g.edgeIterator(node); it.hasNext(); ) {
if (visited.containsKey(expanded)) {
if (visited.get(expanded).equals(Status.start)) // Back-Edge, Zyklus
return false; // else Cross-Edge, ok
} else { // !visited.containsKey(expanded)
visited.put(expanded, Status.start);
if (!acyclicRek(g, expanded, visited)) // rekursiv Zyklus erkannt
return false;
}
}
visited.put(node, Status.stop); // Stop Knoten expandieren
return true;
}
|