public void dfs(int v) { if (hasCycle) { return; } if (color[v] != 2) { color[v] = 1; if (graph[v] == null) { color[v] = 2; answer.add(v); return; } for (int i = 0; i < graph[v].size(); i++) { int to = graph[v].get(i); if (color[to] == 0) { dfs(to); } if (color[to] == 1) { hasCycle = true; return; } } color[v] = 2; answer.add(v); } }
public void topSort() { for (int i = 1; i < graph.length; i++) { if (color[i] == 0) { dfs(i); } } Collections.reverse(answer); }