zoukankan      html  css  js  c++  java
  • Course Schedule

    There are a total of n courses you have to take, labeled from 0 to n - 1.

    Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expressed as a pair: [0,1]

    Given the total number of courses and a list of prerequisite pairs, is it possible for you to finish all courses?

    For example:

    2, [[1,0]]

    There are a total of 2 courses to take. To take course 1 you should have finished course 0. So it is possible.

    2, [[1,0],[0,1]]

    There are a total of 2 courses to take. To take course 1 you should have finished course 0, and to take course 0 you should also have finished course 1. So it is impossible.


    查看拓扑排序是否有环

    class Solution {
    public:
        bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites) {
            queue<int>q;
            int cnt = 0;
            int indep[numCourses+1] = {0};
            for(int i = 0; i < prerequisites.size(); i++)
            {
                indep[prerequisites[i].first]++;
            }
            for(int i = 0; i < numCourses; i++)
            {
                if(indep[i] == 0)
                {
                    q.push(i);
                }
            }
            while(!q.empty())
            {
                int head = q.front();
                q.pop();
                cnt++;
                for(int i = 0; i < prerequisites.size(); i++)
                {
                    if(prerequisites[i].second == head) {
                        indep[prerequisites[i].first]--;
                        if(indep[prerequisites[i].first] == 0)
                            q.push(prerequisites[i].first);
                    }
                }
            }
            return cnt==numCourses;
        }
    };


  • 相关阅读:
    第二阶段总结
    今日总结
    今日总结
    今日总结
    今日总结
    今日总结
    今日总结
    今日总结
    今日总结
    开学总结
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/7373028.html
Copyright © 2011-2022 走看看