207. 课程表
竟然考我拓扑排序!!!
题目:


题解:
java
class Solution {
public boolean canFinish(int numCourses, int[][] prerequisites) {
//用拓扑排序
//创建映射表
Map<Integer, List<Integer>> map = new HashMap<>();
//创建记录要想学习某个课程,必须先学习几门课程,作为入度数
int[] pres = new int[numCourses];
//进行初始化映射表
for(int i=0; i<numCourses; i++) {
map.put(i, new ArrayList<Integer>());
}
//将prerequisites数组中的数进行处理
for(int i=0;i<prerequisites.length;i++) {
int course = prerequisites[i][0];
int preCourse = prerequisites[i][1];
map.get(preCourse).add(course);
pres[course]++;
}
//创建队列
Queue<Integer> queue = new LinkedList<>();
for(int i=0;i<numCourses;i++) {
if(pres[i]==0) {
queue.offer(i);
}
}
//创建变量用来表示已经学习的课程
int learned = 0;
//进行bfs搜索
while(queue.size()>0) {
//获取队列中的值
int t = queue.poll();
learned++;
//查看先修课程
List<Integer> list = map.get(t);
for(Integer c:list) {
pres[c]--;
if(pres[c]==0) {
queue.offer(c);
}
}
}
//直接返回learned与numCourses比较的结果
return learned==numCourses;
}
}