class Solution {
public:
bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
vector<int> degree(numCourses,0);
unordered_map<int,vector<int>> map;
for(auto pair : prerequisites){
degree[pair[0]]++;
if(!map.count(pair[1])){
map[pair[1]]={pair[0]};
}else{
map[pair[1]].push_back(pair[0]);
}
}
queue<int> q;
for(int i=0;i<numCourses;i++){
if(degree[i]==0){
q.push(i);
}
}
int count=0;
while(! q.empty()){
int m=q.front();
count++;
for(auto couse:map[m]){
degree[couse]--;
if(degree[couse]==0){
q.push(couse);
}
}
q.pop();
}
if(count==numCourses) return true; else return false;
}
};
拓扑排序、bfs