拓扑排序一般应用于,你完成B之前需要完成A,找到昨晚这些事情的顺序
拓扑排序可以先找到度为0的点,作为答案,知道找完或者不存在度为0的点,后者意味着没有答案
210. 课程表 II
class Solution {
public:
vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {
vector<vector<int>>rel(numCourses);
vector<int>d(numCourses);
vector<int>res;
for(auto p : prerequisites){
rel[p[1]].push_back(p[0]);
d[p[0]]++;
}
queue<int>q;
for(int i = 0;i<numCourses;i++){
if(d[i] == 0){
q.push(i);
}
}
while(!q.empty()){
int a = q.front();
q.pop();
res.push_back(a);
for(auto k :rel[a]){
d[k]--;
if(d[k]==0){
q.push(k);
}
}
}
if(res.size()<numCourses){
return {};
}
return res;
}
};