class Solution {
public boolean canFinish(int numCourses, int[][] prerequisites) {
//【1,2】,[3,4]
int[] indegree=new int[numCourses]; //入度数组
List<List<Integer>> edg=new ArrayList<>(); //邻接矩阵,下标为4,内容为3
Queue<Integer> queue=new LinkedList<>(); //
for(int i=0;i<numCourses;i++){
edg.add(new ArrayList<>()); //完善内部结构
}
for(int[] cp:prerequisites){ // 每次取一个数组【3,4】
indegree[cp[0]]++; //i[3]++ 入度+1
edg.get(cp[1]).add(cp[0]); //邻接矩阵位置为4,放入3
}
for(int i=0;i<numCourses;i++){
if(indegree[i]==0) queue.add(i); //邻接矩阵为0,表示没有上一级
}
while(!queue.isEmpty()){
int pre=queue.poll();
numCourses--;
for(int cur:edg.get(pre)){ //访问相邻
if(--indegree[cur]==0) queue.add(cur);
}
}
return numCourses==0;
}
}