zoukankan      html  css  js  c++  java
  • leetcode207 课程表(Medium)

    题目来源:leetcode207 课程表

    题目描述:

    你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 。

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

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

    示例 1:

    输入: 2, [[1,0]]
    输出: true
    解释: 总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。所以这是可能的。

    示例 2:

    输入: 2, [[1,0],[0,1]]
    输出: false
    解释: 总共有 2 门课程。学习课程 1 之前,你需要先完成​课程 0;并且学习课程 0 之前,你还应先完成课程 1。这是不可能的。

    提示:

    输入的先决条件是由 边缘列表 表示的图形,而不是 邻接矩阵 。详情请参见图的表示法。
    你可以假定输入的先决条件中没有重复的边。
    1 <= numCourses <= 10^5

    解题思路:

    class Solution {
    public:
        bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
           vector<vector<int>> graph(numCourses,vector<int>());//邻接表,记录一个结点的后继
           vector<int> in(numCourses,0);//入度
           for(int i=0;i<prerequisites.size();i++){
               graph[prerequisites[i][1]].push_back(prerequisites[i][0]);
               ++in[prerequisites[i][0]];
           }
           queue<int> q;
           int i=0,num=0;
           //入度为0的结点入队
           for(i=0;i<numCourses;i++){
               if(in[i]==0){
                   q.push(i);
                   num++;
               } 
           }
           while(!q.empty()){
               int t=q.front();
               q.pop();
               //入度为0的所有后继结点的入度-1
               for(i=0;i<graph[t].size();i++){
                   in[graph[t][i]]--;
                   //如果新得到入度为0的,也加入队列
                   if(in[graph[t][i]]==0){
                       q.push(graph[t][i]);
                       num++;//记录入度为0的个数
                   } 
               }
           }
           //最后所有的结点的入度都为0,如果个数不满足,则返回false,否则返回true
           if(num==numCourses) return true;
           else  return false;
        }
    };
    
  • 相关阅读:
    【已解决】github中git push origin master出错:error: failed to push some refs to
    好记心不如烂笔头,ssh登录 The authenticity of host 192.168.0.xxx can't be established. 的问题
    THINKPHP 5.0目录结构
    thinkphp5.0入口文件
    thinkphp5.0 生命周期
    thinkphp5.0 架构
    Django template
    Django queryset
    Django model
    Python unittest
  • 原文地址:https://www.cnblogs.com/yjcoding/p/13356855.html
Copyright © 2011-2022 走看看