解法
修改一下之前广度优先遍历的解法
代码
import java.util.ArrayList;
import java.util.LinkedList;
class Solution {
public static int[] findOrder(int numCourses, int[][] prerequisites) {
//图
ArrayList<ArrayList<Integer>> graph=new ArrayList<>();
LinkedList<Integer> queue=new LinkedList<>();
int[] res=new int[numCourses];
int[] in=new int[numCourses];
//init1
for(int i=0;i<numCourses;i++)
{
graph.add(new ArrayList<>());
}
//初始化图和入度表
for(int i=0;i<prerequisites.length;i++)
{
in[prerequisites[i][0]]++;
graph.get(prerequisites[i][1]).add(prerequisites[i][0]);
}
int count=0;
for(int i=0;i<numCourses;i++)
{
if(in[i]==0){
queue.addLast(i);//添加的节点
res[count++]=i;
}
}
while(!queue.isEmpty())
{
Integer temp = queue.pollFirst();
numCourses--;
for(Integer e:graph.get(temp))
{
if(--in[e]==0)
{
queue.addLast(e);
res[count++]=e;
}
}
}
return numCourses==0?res:new int[]{};
}
}
京公网安备 11010502036488号