LeetCode207. Course Schedule课程表原题链接
Key: 非常淳朴的拓扑排序
题意是:某些课程在修读之前需要完成其先修课程,给出所有课程之间的关系,判断是否能完成修读所有课程
那么就是判断这个课程关系图是否是拓扑图,没什么特别的地方,只需要用个淳朴的拓扑排序即可。
以前做过一道题意一毛一样的:HihoCoder-1174 以后兴趣的可以看一眼
class Solution {
public:
bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
int in[5001] = {0}; //入度
for(int i = 0; i < numCourses; i++)
in[i] = 0;
int length = prerequisites.size();
for(int i = 0; i < length; i++){
in[prerequisites[i][1]] ++ ;
}
queue<int> que;
for (int i = 0; i < numCourses; i++)
{
if (in[i]==0)
{
que.push(i);
//cout<<i<<"**"<<endl;
}
}
int count = 0;
while(!que.empty())
{
int u = que.front();
//cout<<u<<"pop"<<endl;
que.pop();
count++;
for(int i = 0; i < length; i++)
{
if(prerequisites[i][0] == u){
int v = prerequisites[i][1];
in[v]--;
if(in[v]==0)
{
que.push(v);
}
}
}
}
if(count == numCourses)
return true;
else
return false;
}
};