题目:https://leetcode-cn.com/problems/course-schedule-ii/
代码:
class Solution {
public:
vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {
int count = 0;
stack<int>S;
vector<int>result;
vector<int>degree(numCourses, 0);
vector<vector<int>>G(numCourses);
for(int i = 0;i < prerequisites.size();i++){
G[prerequisites[i][1]].push_back(prerequisites[i][0]);
degree[prerequisites[i][0]]++;
}
for(int i = 0;i < numCourses;i++)
if(degree[i] == 0){
S.push(i);
count++;
}
while(!S.empty()){
int temp = S.top();
S.pop();
for(int i = 0;i < G[temp].size();i++){
degree[G[temp][i]]--;
if(degree[G[temp][i]] == 0){
S.push(G[temp][i]);
count++;
}
}
//每一次出栈都需要将节点存入result中
result.push_back(temp);
}
if(count == numCourses) return result;
return {};
}
};
解题思路:拓扑排序,这题与课程表(题解:https://blog.csdn.net/curry3030/article/details/100025753)十分相似,只需要在课程表的基础上加上一个vector<int>来存储你pop的路径就可以了。