예제 #1
0
 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;
 }
예제 #2
0
 private void Dfs(Digraph g, int s)
 {
     marked[s] = true;
     foreach (int i in g.Adj(s))
     {
         if (!marked[i])
         {
             Dfs(g, i);
         }
     }
 }
예제 #3
0
 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);
 }