210. 课程表 II
题目链接:210. 课程表 II
代码如下:
//拓扑排序:判断图中是否存在回路
class Solution {
public:vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {vector<int> res;//存储结果vector<int> indegree(numCourses,0);//存储每个节点的度vector<int> sub[numCourses];//存储每个节点的邻接节点//求每个节点的度和邻接节点for(int i=0;i<prerequisites.size();i++){sub[prerequisites[i][1]].emplace_back(prerequisites[i][0]);indegree[prerequisites[i][0]]++;}queue<int> que;//用于进行拓扑排序for(int i=0;i<numCourses;i++)//把入度为0的节点放入到队列中if(indegree[i]==0)que.push(i);int count=0;while(!que.empty()){int u=que.front();que.pop();count++;res.emplace_back(u);for(int j=0;j<sub[u].size();j++){if((--indegree[sub[u][j]])==0)//把邻接的入度为0的节点放入队列que.push(sub[u][j]);}}if(numCourses!=count)//存在回路,即无法完成课程安排res.clear();return res;}
};