Example #1
0
        private int count;//强连通分量的数量
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="g">有向图</param>
        public KosarajuSCC(IDirectedGraph g)
        {
            marked = new bool[g.V];
            id     = new int[g.V];
            DepthFirstOrder order = new DepthFirstOrder(g.Reverse());

            foreach (var w in order.ReversePost()) //获取逆图的拓扑排序
            {
                if (!marked[w])                    //在逆图的拓扑序上
                {
                    dfs(g, w);                     //
                    ++count;
                }
            }
        }
Example #2
0
        public KosarajuSCC(IDirectedGraph graph)
        {
            isConnected = new bool[graph.VertexCount];
            id          = new int[graph.VertexCount];

            DirectedDepthFirstOrder order = new DirectedDepthFirstOrder(graph.Reverse());

            foreach (var v in order.ReversePostOrder())
            {
                if (!isConnected[v])
                {
                    DFS(graph, v);
                    count++;
                }
            }
        }