好比:[1,0][0,1][2,1]就轉變爲java
0:[1]node
1:[0,2]數組
2:[]ui
設置visited數組,來判斷某節點處於未訪問狀態(0)、正在訪問狀態(-1)以及已訪問狀態(1)這三種狀態。spa
使用DFS來訪問每一個節點判斷是否存在環code
class Solution {
public boolean canFinish(int numCourses, int[][] prerequisites) {
ArrayList<ArrayList<Integer>> processResult = new ArrayList<ArrayList<Integer>>();
int[] visited = new int[numCourses];
for(int i = 0; i < numCourses; i++){
ArrayList<Integer> temp = new ArrayList<Integer>();
processResult.add(temp);
visited[i] = 0;
}
for(int i = 0; i < prerequisites.length; i++){
processResult.get(prerequisites[i][1]).add(prerequisites[i][0]);
}
for(int i=0;i<numCourses;i++){
for(Integer num:processResult.get(i)){
System.out.println(num);
}
}
for(int i = 0;i<numCourses;i++){
if(!dfs(i, processResult,visited)){
return false;
}
}
return true;
}
public boolean dfs(int i,ArrayList<ArrayList<Integer>> processResult, int[] visited){
if(visited[i] == 1){
return true;
}else if(visited[i] == -1){
return false;
}else{
ArrayList<Integer> path = processResult.get(i);
visited[i] = -1;
for(Integer node:path){
if(!dfs(node, processResult, visited)){
return false;
}
}
visited[i] = 1;
}
return true;
}
}
複製代碼