private void Dfs(Digraph g, int v) { marked[v] = true; onStack[v] = true; foreach (int i in g.Adj(v)) { if (HasCycle()) { return; } else if (!marked[i]) { edgeTo[i] = v; Dfs(g, i); } else if (onStack[i]) { cycle = new Stack <int>(); for (int j = v; j != i; j = edgeTo[j]) { cycle.Push(j); } cycle.Push(i); cycle.Push(v); } } onStack[v] = false; }
private void Dfs(Digraph g, int s) { marked[s] = true; foreach (int i in g.Adj(s)) { if (!marked[i]) { Dfs(g, i); } } }
private void Dfs(Digraph g, int v) { pre.Enqueue(v); marked[v] = true; foreach (int i in g.Adj(v)) { if (!marked[i]) { Dfs(g, i); } } post.Enqueue(v); reversePost.Push(v); }