Easy Coding
  Forum Wiki Tagging Projekte Karte RSS
» Start
» All Recent Changes
» Wiki Suche
» Wiki Hilfe

Algorithmen

How To's Informationen

edit SideBar

Neue Wiki Eintrage finden Sie unter easy-coding.de/wiki.

Zyklenfreiheit

azyklisch.java
  1. boolean acyclic(Graph g) {
  2.         Map<String, Status> visited = new TreeMap<String, Status>();
  3.         for (Iterator<String> it = g.nodeIterator(); it.hasNext(); ) {
  4.                 String n = it.next();
  5.                 if (!visited.containsKey(n))
  6.                         if (!acyclicRek(g, n, visited))
  7.                                 return false;
  8.         }
  9.         return true;
  10. }
  11.  
  12. boolean acyclicRek(Graph g, String node, Map<String, Status> visited) {
  13.         visited.put(node, Status.start); // Start Knoten expandieren
  14.         for (Iterator<String> it = g.edgeIterator(node); it.hasNext(); ) {
  15.                 String expanded = it.next();
  16.                 if (visited.containsKey(expanded)) {
  17.                         if (visited.get(expanded).equals(Status.start)) // Back-Edge, Zyklus
  18.                                 return false; // else Cross-Edge, ok
  19.                 } else { // !visited.containsKey(expanded)
  20.                         visited.put(expanded, Status.start);
  21.                         if (!acyclicRek(g, expanded, visited)) // rekursiv Zyklus erkannt
  22.                                 return false;
  23.                 }
  24.         }
  25.         visited.put(node, Status.stop); // Stop Knoten expandieren
  26.         return true;
  27. }
Zuletzt geändert am 28.09.2006 18:03 Uhr
  Impressum