See More

// https://www.coursera.org/learn/algorithms-part2/lecture/RAMNS/topological-sort public class DepthFirstOrder { private boolean[] marked; private Stack reversePost; public DepthFirstOrder(Digraph G) { reversePost = new Stack(); marked = new Boolean[G.V()]; for (int v = 0; v < G.V(); v++) if (!marked[v]) dfs(G, v); } private void dfs(Digraph G, int v) { marked[v] = true; for (int w : G.adj(v)) if (!marked[w]) dfs(G,w); reversePost.push(v); } public Iterable reversePost() { return reversePost; } }