private bool[] onStack; //递归调用的栈 上的所有点 public DirectedCycle(DiGraph G) { marked = new bool[G.Vnums()]; edgeTo = new int[G.Vnums()]; onStack = new bool[G.Vnums()]; for (int v = 0; v < G.Vnums(); v++) { if (!marked[v]) { dfs(G, v); } } }
private Stack <int> reversePost; //逆后序:.后,将顶点压入栈 public DFOrder(DiGraph G) { pre = new Queue <int>(); post = new Queue <int>(); reversePost = new Stack <int>(); marked = new bool[G.Vnums()]; for (int v = 0; v < G.Vnums(); v++) { if (!marked[v]) { dfs(G, v); } } }
public AllPaths(DiGraph G, int s, int d) { this.S = s; marked = new bool[G.Vnums()]; //instack = new bool[G.Vnums()]; stack = new Stack <int>(); path = new List <ArrayList>(); dfs(G, s, d); }
public DirectedDFS(DiGraph G, NodeList <int> sources) //链表sources 中的点 可达的所有点 { marked = new bool[G.Vnums()]; while (sources != null) { if (!marked[sources.val]) { dfs(G, sources.val); } sources = sources.next; } }
public DirectedDFS(DiGraph G, int s) { marked = new bool[G.Vnums()]; dfs(G, s); }