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; } } }
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++; } } }