题目大意:给出n个课程之间关于先修课程的关系,[0,1]表示上0课程之前必须先上1课程,问所给出的信息是否矛盾
分析:拓扑排序。根据给出的[]数组信息建立有向图,然后进行拓扑排序,若有环则说明有矛盾。
代码:
class Solution {
public:
bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites) {
vector<vector<int>> pre(numCourses);
vector<int> degree(numCourses);
for(auto p : prerequisites){
pre[p.second].push_back(p.first);
degree[p.first]++;
}
for(int i = 0;i < numCourses;i++){
int m = 0;
int mark;
for(int j = 0;j < numCourses;j++){
if(degree[j] == 0){
mark = j;
m++;
}
}
if(m == 0) return false;
degree[mark] = -1;
for(auto later : pre[mark]){
degree[later]--;
}
}
return true;
}
};