题目:题目链接
思路:和Course Schedule I一样,拓补排序。多一个记录拓补排序答案的数组就可以了。上代码:
/*
leetcode210. Course Schedule II
*/
class Solution {
public:
vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {
vector<int>adj[numCourses + 5];
vector<int>in(numCourses + 5, 0);
for (int i = 0; i < prerequisites.size(); ++i) {
adj[prerequisites[i][1]].push_back(prerequisites[i][0]);
in[prerequisites[i][0]]++;
}
//toposort start
queue<int>q;
vector<int>ans;
for (int i = 0; i < numCourses; ++i) {
if (in[i] == 0)
q.push(i);
}
while (!q.empty()) {
int x = q.front();
for (const auto& ele : adj[x]) {
in[ele]--;
if (in[ele] == 0) q.push(ele);
}
ans.push_back(x);
q.pop();
}
//toposort end
if (ans.size() != numCourses) return {};
return ans;
}
};
加油!!!