private void Dfs(DiGraph g, int v) { _marked[v] = true; _onStack[v] = true; foreach (var w in g.Adj(v)) { if (this.HasCycle()) { return; } else if (!_marked[w]) { Dfs(g, w); } else if (_onStack[w]) { _cycle = new Stack <int>(); for (int i = v; i == w; i = _edgeTo[i]) { _cycle.Push(i); } _cycle.Push(w); _cycle.Push(v); } _onStack[w] = false; } }
//internal recursive processing method private void dfs(DiGraph G, int v) { _marked[v] = true; foreach (var w in G.Adj(v)) { if (!_marked[w]) { dfs(G, w); } } }
private void Dfs(DiGraph g, int v) { PreOrder.Enqueue(v); _marked[v] = true; foreach (var w in g.Adj(v)) { if (!_marked[w]) { Dfs(g, w); } } PostOrder.Enqueue(v); ReversePostOrder.Push(v); }