原理与点击打开链接一样,拓扑排序法遍历即可,用vector保存每一个入度为0的结点。
class Solution {
public:
vector<int> findOrder(int numCourses, vector<pair<int, int>>& prerequisites) {
vector<unordered_set<int>> set;
vector<int> vec;
for(int i=0;i<numCourses;i++){
unordered_set<int> set_tmp;
set.push_back(set_tmp);
}
int size = prerequisites.size();
for(int i=0;i<size;i++){
set[prerequisites[i].second].insert(prerequisites[i].first);
}
int preNums[numCourses]={0};
for(int i=0;i<numCourses;i++){
for(auto j=set[i].begin();j!=set[i].end();j++){
preNums[*j]++;
}
}
for(int i=0;i<numCourses;i++){
int j=0;
for(;j<numCourses;j++){
if(preNums[j]==0)break;
}
if(j==numCourses){
vector<int> tmp;
return tmp;
}
vec.push_back(j);
preNums[j]=-1;
for(auto k=set[j].begin();k!=set[j].end();k++){
preNums[*k]--;
}
}
return vec;
}
};