예제 #1
0
        private bool[] onStack;    //递归调用的栈 上的所有点

        public DirectedCycle(DiGraph G)
        {
            marked  = new bool[G.Vnums()];
            edgeTo  = new int[G.Vnums()];
            onStack = new bool[G.Vnums()];
            for (int v = 0; v < G.Vnums(); v++)
            {
                if (!marked[v])
                {
                    dfs(G, v);
                }
            }
        }
예제 #2
0
 private Stack <int> reversePost; //逆后序:.后,将顶点压入栈
 public DFOrder(DiGraph G)
 {
     pre         = new Queue <int>();
     post        = new Queue <int>();
     reversePost = new Stack <int>();
     marked      = new bool[G.Vnums()];
     for (int v = 0; v < G.Vnums(); v++)
     {
         if (!marked[v])
         {
             dfs(G, v);
         }
     }
 }
예제 #3
0
 public AllPaths(DiGraph G, int s, int d)
 {
     this.S = s;
     marked = new bool[G.Vnums()];   //instack = new bool[G.Vnums()];
     stack  = new Stack <int>(); path = new List <ArrayList>();
     dfs(G, s, d);
 }
예제 #4
0
 public DirectedDFS(DiGraph G, NodeList <int> sources)  //链表sources 中的点 可达的所有点
 {
     marked = new bool[G.Vnums()];
     while (sources != null)
     {
         if (!marked[sources.val])
         {
             dfs(G, sources.val);
         }
         sources = sources.next;
     }
 }
예제 #5
0
 public DirectedDFS(DiGraph G, int s)
 {
     marked = new bool[G.Vnums()];
     dfs(G, s);
 }