Topological Sort
重置不含有循环的图, 使所有连接都指向上面。
算法:
后序遍历graph, 并插入到stack; stack将其方向调换。
// postOrder : operate when the pointer leaves the node
// a diagraph may have topological order if there is no directed cycle!!!
class TopologicalSort {
boolean[] marked;
Stack<Integer> reversePost;
public TopologicalSort(Graph G) {
marked = new boolean[G.V()];
reversePost = new Stack<>();
for (int v = 0; v < G.V(); v++) {
if (!marked) {
dfs(G, v);
}
}
}
private void dfs(Graph G, int v) {