美文网首页
Leetcode207:课程表

Leetcode207:课程表

作者: VIELAMI | 来源:发表于2020-05-24 21:03 被阅读0次

    【题目描述】
    你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 。

    在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1]

    给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/course-schedule
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    image.png
    bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
        //Leetcode207:课程表
        queue<int> que;
        vector<int> indegree(numCourses,0);
        vector<vector<int>> adj(numCourses,vector<int>());
    
        //build adjacent list
        for (int i = 0; i < prerequisites.size(); i++) {
            int cur = prerequisites[i][1];
            int adjN = prerequisites[i][0];
            adj[cur].push_back(adjN);
    
            //build indegree list
            indegree[adjN]++;
    
        }
    
        //for (int i = 0; i < adj.size(); i++) {
        //    for (int j = 0; j < adj[i].size(); j++) {
        //        cout << "front: " << i << "  back: " << adj[i][j] << endl;
        //    }
        //}
    
        //for (int i = 0; i < indegree.size(); i++) {
        //    cout << indegree[i] << " ";
        //}
        //cout << endl;
    
        for (int i = 0; i < indegree.size(); i++) {
            if (indegree[i] == 0) {
                que.push(i);
            }
        }
    
        while (!que.empty()) {
            int cur = que.front();
            que.pop();
            //cout << "pop: " << cur << endl;
            numCourses--;
            indegree[cur] = -1;
            for (int i = 0; i < adj[cur].size(); i++) {
                indegree[adj[cur][i]]--;
                if (indegree[adj[cur][i]] == 0) {
                    que.push(adj[cur][i]);
                }
            }
        }
    
        if (numCourses == 0) return true;
        else return false;
    }
    

    相关文章

      网友评论

          本文标题:Leetcode207:课程表

          本文链接:https://www.haomeiwen.com/subject/kgqsahtx.html