Beispiel #1
0
 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);
   }
 }
Beispiel #2
0
 public void topSort() {
   for (int i = 1; i < graph.length; i++) {
     if (color[i] == 0) {
       dfs(i);
     }
   }
   Collections.reverse(answer);
 }