课程表Ⅱ:
思路:
和课程表类似,在进行深度遍历的同时记录下路径即可,因为可能有多种走法,所以并不需要固定路径
代码:
class Solution {
ArrayList<Integer> result = new ArrayList<>();
public int[] findOrder(int numCourses, int[][] prerequisites) {
int[] flag = new int[numCourses];
List<List<Integer>> list = new ArrayList<>();
for(int i=0;i<numCourses;i++){
list.add(new ArrayList<>());
}
for(int i=0;i< prerequisites.length;i++){
list.get(prerequisites[i][0]).add(prerequisites[i][1]);
}
boolean target = true;
for(int i=0;i<numCourses;i++){
if(!dfs(flag,list,i)) target = false;
}
if(target==false){
return new int[0];
}
int[] nums = new int[numCourses];
for(int i=0;i<numCourses;i++){
nums[i] = result.get(i);
}
return nums;
}
public boolean dfs(int[] flag,List<List<Integer>> list,int i){
if(flag[i]==-1) return true;
if(flag[i]==1) return false;
flag[i]=1;
for(int j:list.get(i)){
if(!dfs(flag,list,j)) return false;
}
flag[i]=-1;
result.add(i);
return true;
}
}