예제 #1
0
        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);
         }
     }
 }
예제 #3
0
 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);
 }