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); } } }
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++; } } }
public DirectedDFS(Digraph g, HashSet <int> sources) { _marked = new bool[g.V()]; foreach (int s in sources) { if (!_marked[s]) { Dfs(g, s); } } }
public DirectedDFS(Digraph g, int s) { _marked = new bool[g.V()]; Dfs(g, s); }