zoukankan      html  css  js  c++  java
  • leetcode算法题基础(二十二)广度优先(四)207. 课程表

    你这个学期必须选修 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

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

    class Solution:
        def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:
            from collections import deque
    
            # 将边缘列表表示的先决条件转化为 邻接表
            adjacency = [[] for _ in range(numCourses)]
            # 定义列表统计图中每个节点的入度情况
            indegree = [0] * numCourses
    
            for info in prerequisites:
                adjacency[info[1]].append(info[0])
                indegree[info[0]] += 1
            
            queue = deque()
    
            # 将入度为 0 的节点入队
            for i in range(len(indegree)):
                if not indegree[i]:
                    queue.append(i)
            # 开始进行搜索
            while queue:
                u = queue.popleft()
                numCourses -= 1
                # 搜索邻接节点
                for v in adjacency[u]:
                    # 将邻接节点入度减 1
                    indegree[v] -= 1
                    # 如果入度为 0,入队
                    if indegree[v] == 0:
                        queue.append(v)
    
            return numCourses == 0

    本文来自博客园,作者:秋华,转载请注明原文链接:https://www.cnblogs.com/qiu-hua/p/14003619.html

  • 相关阅读:
    Netty源码分析第4章(pipeline)---->第5节: 传播outbound事件
    Netty源码分析第4章(pipeline)---->第4节: 传播inbound事件
    Google地图路线规划
    bootstrap Table 中给某一特定值设置table选中
    枚举类型定义
    日期格式转换 java 2016-09-03T00:00:00.000+08:00
    String字符串针对常量池的优化
    【转】MySQL性能优化的最佳21条经验
    【转】 jquery遍历json数组方法
    如何设置tomcat定时自动重启
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/14003619.html
Copyright © 2011-2022 走看看