public Topological(EdgeWeightedDigraph G) { DirectedCycle cycleFinder = new DirectedCycle(G); if (!cycleFinder.HasCycle()) { DepthFirstOrder dfs = new DepthFirstOrder(G); order = dfs.ReversePost(); } }
private Stack <int> order; //顶点的拓扑排序 public Topological(Digraph G) { DirectedCycle cycleFinder = new DirectedCycle(G);//用于判断有向图G是否有环 if (!cycleFinder.HasCycle()) { DepthFirstOrder dfs = new DepthFirstOrder(G); order = dfs.ReversePost(); } }
private int count; //强连通分量的数量 public KosarajuSCC(Digraph G) { marked = new bool[G.VNumber()]; id = new int[G.VNumber()]; //第一次深度优先,得到反向有向图顶点的逆后序排列 DepthFirstOrder order = new DepthFirstOrder(G.Reverse()); foreach (int s in order.ReversePost()) { if (!marked[s]) { Dfs(G, s);//第二次深度优先搜索,得到有向图的强连通分量 count++; } } }