private void dfs(DiGraph G, int v) { marked[v] = true; onStack[v] = true; foreach (var w in G.adj(v)) { if (!marked[w]) { edgeTo[w] = v; dfs(G, w); } else if (onStack[w]) { if (circle == null) { return; } else { circle = new StackLinkedList <int>(); for (var x = w; x != v; x = edgeTo[x]) { circle.Push(x); } circle.Push(v); circle.Push(w); } } } onStack[v] = false; }
private void dfs(DiGraph G, int v) { marked[v] = true; id[v] = count; foreach (var w in G.adj(v)) { if (!marked[w]) { dfs(G, w); } } }
private void dfs(DiGraph G, int v) { marked[v] = true; foreach (var w in G.adj(v)) { if (marked[w]) { continue; } dfs(G, w); } reversePostOrder.Push(v); }