private void Dfs(Digraph G, int v)//寻找相连的顶点 { onStack[v] = true; marked[v] = true; foreach (int w in G.Adj(v)) { if (this.HasCycle()) { return; } else if (!marked[w]) { edgeTo[w] = v;//存储最先到达w点的v点 Dfs(G, w); } else if (onStack[w]) { cycle = new Stack <int>(); for (int x = v; x != w; x = edgeTo[x]) { cycle.Push(x); } cycle.Push(w); cycle.Push(v); } } onStack[v] = false; }
private void Dfs(Digraph G, int v) { marked[v] = true; foreach (int w in G.Adj(v)) { if (!marked[w]) { Dfs(G, w); } } }
private void Dfs(Digraph G, int v) { pre.enqueue(v); marked[v] = true; foreach (int w in G.Adj(v)) { if (!marked[w]) { Dfs(G, w); } } post.enqueue(v); reversePost.Push(v); }