class Solution {
public:
bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
if(numCourses==1 || prerequisites.size()==0)
return true;
vector<int> indeg(numCourses);//入度表默认初始化=0
vector<vector<int>> course(numCourses);//课程表: numCourses维度
queue<int> zero;//入度=0的队列
for(int i=0;i<prerequisites.size();i++)//对每一组先修课程要求,统计入度
{
indeg[prerequisites[i][0]]++;//每个课程入度数
course[prerequisites[i][1]].push_back(prerequisites[i][0]);//后续课程
}
//获取入度=0课程
for(int i=0;i<numCourses;i++)
if(indeg[i]==0)
zero.push(i);
//topSort BFS
while(zero.size()!=0)
{
int pre = zero.front();
zero.pop();
numCourses--;
for(int i=0;i<course[pre].size();i++)
{
indeg[course[pre][i]]--;//该课程的后续所有课程入度均-1
if(indeg[course[pre][i]] == 0)
zero.push(course[pre][i]);
}
}
return numCourses==0;
}
};
207.课程表
最新推荐文章于 2025-04-12 18:29:15 发布