Course Schedule
Total Accepted: 3707 Total Submissions: 18102There are a total of n courses you have to take, labeled from 0
ton - 1
.
Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expressed as a pair:[0,1]
Given the total number of courses and a list of prerequisite pairs, is it possible for you to finish all courses?
For example:
2, [[1,0]]
There are a total of 2 courses to take. To take course 1 you should have finished course 0. So it is possible.
2, [[1,0],[0,1]]
There are a total of 2 courses to take. To take course 1 you should have finished course 0, and to take course 0 you should also have finished course 1. So it is impossible.
Note:
The input prerequisites is a graph represented by a list of edges, not adjacency matrices. Read more abouthow a graph is represented.
[思路]
此问题等价于 图(or forest)中有无环的存在.
使用topological sorting, 成功sort后,如果prerequisite没有空,则没有环.
[CODE]
public class Solution {
public boolean canFinish(int numCourses, int[][] prerequisites) {
int[] map = new int[numCourses];
for(int i=0;i<prerequisites.length; i++) {
map[ prerequisites[i][1] ] ++;
}
Queue<Integer> que = new LinkedList<Integer>();
for(int i=0; i<map.length; i++) {
if(map[i]==0) que.add(i);
}
int count = que.size();
while(!que.isEmpty() ) {
int k = que.remove();
for(int i=0; i<prerequisites.length; i++) {
if(k == prerequisites[i][0]) {
int l = prerequisites[i][1];
map[l]--;
if(map[l]==0) {
que.add(l);
++count;
}
}
}
}
return count == numCourses;
}
}