207. 课程表

207. 课程表


题目链接:207. 课程表

代码如下:

//拓扑排序:判断图中是否存在回路
class Solution {
public:
    bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
        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++;
            for(int j=0;j<sub[u].size();j++)
            {
                if((--indegree[sub[u][j]])==0)//把邻接的入度为0的节点放入队列
                    que.push(sub[u][j]);
            }
        }
        return count==numCourses;
    }
};

你可能感兴趣的:(leetcode,c++)