LeetCode——第二百零七题(python):课程表

题目

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

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

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

在这里插入图片描述
提示:

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

运行成功的代码
class Solution(object):
    def canFinish(self, numCourses, prerequisites):
        """
        :type numCourses: int
        :type prerequisites: List[List[int]]
        :rtype: bool
        """
        indegrees = [0 for _ in range(numCourses)]      # 入度列表
        adjacency = [[] for _ in range(numCourses)]     # 邻接矩阵
        queue = deque()                                 # 入度为0的结点队列
        
        for cur, pre in prerequisites:
            indegrees[cur]+=1
            adjacency[pre].append(cur)
            
        for i in range(len(indegrees)):                 # 当前入度为0的结点入队
            if indegrees[i]==0: 
                queue.append(i)
        
        count = 0
        
        while queue:
            node = queue.popleft()
            count+=1
            for cur in adjacency[node]:
                indegrees[cur]-=1
                if indegrees[cur] == 0:
                    queue.append(cur)
        return count == numCourses
运行结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45398231/article/details/106252285