class Solution {
public:
bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites) {
vector<int> indegree(numCourses,0);
vector<vector<int>> v(numCourses);
for(auto &x:prerequisites){
indegree[x.first]++;
v[x.second].push_back(x.first);
}
queue<int> q;
for(int i=0;i<numCourses;++i){
if(indegree[i]==0) q.push(i);
}
int cnt=0;
while(!q.empty()){
int w=q.front();
q.pop();
++cnt;
for(int u:v[w]){
indegree[u]--;
if(indegree[u]==0) q.push(u);
}
}
return cnt==numCourses;
}
};
207. 课程表
最新推荐文章于 2025-09-29 09:01:30 发布
本文介绍了一个课程表问题的解决方案,通过使用拓扑排序算法来判断是否有有效的课程完成顺序。算法首先构建了图并计算每个节点的入度,然后将所有入度为0的节点加入队列,接着进行拓扑排序直至队列为空。最后验证是否所有课程都能被正确地安排。
4065

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



