class Solution {
public:
vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {
int N = numCourses;
vector<vector<int>> edge(N,vector<int>());
unordered_map<int,int> mp;
for(int i=0;i<prerequisites.size();i++){
int b = prerequisites[i][0];
int a = prerequisites[i][1];
edge[a].push_back(b);
mp[b]++;
}
queue<int> q;
for(int i=0;i<N;i++) if(mp[i] == 0) q.push(i);
vector<int> ans(N,0);
int cnt = 0;
while(!q.empty()){
int now = q.front();
q.pop();
ans[cnt++] = now;
for(int i=0;i<edge[now].size();i++){
int next = edge[now][i];
if(mp[next] == 0) continue; // 已经访问过
mp[next] -- ;
if(mp[next] == 0) q.push(next);
}
}
if(cnt != N) return vector<int>();
return ans;
}
};
No.94 - LeetCode210 - 拓扑排序
最新推荐文章于 2025-09-29 18:45:31 发布
本文深入探讨了一种用于解决课程先修关系的课程排序算法。通过使用图论中的拓扑排序方法,该算法能够有效地确定一系列课程的学习顺序,确保学生遵循正确的先修课程路径。文章详细解释了算法的实现细节,包括构建图结构、执行拓扑排序过程以及最终返回排序后的课程列表。
385

被折叠的 条评论
为什么被折叠?



