Beispiel #1
0
        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);
 }