Für jeden Knoten v: visited(v) = false, finished(v) = false Für jeden Knoten v: DFS(v,v) "kein Zyklus gefunden" und Ende DFS(v,f): if finished(v) return if visited(v) x < - v "Zyklus gefunden" und Ende visited(v) = true für jeden Nachbarn w von v if w ungleich f DFS(w,v) finished(v) = true Am Ende des Algorithmus stellen alle Knoten die als visited und nicht finished markiert sind eine Obermenge eines Zyklus dar. Den Zyklus selbst erhält man indem man den Knoten der zum positiven Abbruch führte (x) merkt und dann folgendes ausführt Für jeden Knoten v: DFS_C(v,v) DFS_C(v,f): if v = x Abbruch finished(v) = true für jeden Nachbarn w von v if w ungleich f DFS_C(w,v) Jetzt ist die Menge aller Knoten die als visited und nicht finished markiert sind genau dem eines Zyklus (Nachweis über entsprechende Implementation) (nicht signierter Beitrag von Cdr McLovin 23:28, 25. Sep. 2014 (CEST) )