Ejemplo n.º 1
0
 public DepthFirstOrder(Digraph dg)
 {
     preQueue    = new Queue <int>();
     postQueue   = new Queue <int>();
     reversePost = new Stack <int>();
     marked      = new bool[dg.V()];
     for (int s = 0; s < dg.V(); s++)
     {
         if (!marked[s])
         {
             Dfs(dg, s);
         }
     }
 }
Ejemplo n.º 2
0
        public KosarajuSCC(Digraph g)
        {
            marked = new bool[g.V()];
            id     = new int[g.V()];
            // 以g的 逆后序 遍历g中的节点,然后记录s可达的点
            //原理: { s可达的Vi } 交 { 逆后序中比s早结束的Vj } =》 强连通分量
            DepthFirstOrder order = new DepthFirstOrder(g.Reverse());

            foreach (int s in order.Reverse)
            {
                if (!marked[s])
                {
                    Dfs(g, s);
                    count++;
                }
            }
        }
Ejemplo n.º 3
0
 public DirectedDFS(Digraph g, HashSet <int> sources)
 {
     _marked = new bool[g.V()];
     foreach (int s in sources)
     {
         if (!_marked[s])
         {
             Dfs(g, s);
         }
     }
 }
Ejemplo n.º 4
0
 public DirectedDFS(Digraph g, int s)
 {
     _marked = new bool[g.V()];
     Dfs(g, s);
 }