LeetCode 207 Course Schedule (Python)

Posted by 小明MaxMing on May 29, 2020

题目

There are a total of numCourses courses you have to take, labeled from 0 to numCourses-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?

解题思路

根据课程前置关系建立有向图,判断这个图是否存在环

代码

class Solution:
    def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:
        inbound = [0] * numCourses
        edge = defaultdict(list)
        for x, y in prerequisites:
            inbound[x] += 1
            edge[y].append(x)
        q = [i for i in range(numCourses) if inbound[i] == 0]
        visited = 0
        while q:
            cur = q.pop()
            visited += 1  
            for n in edge[cur]:
                inbound[n] -= 1
                if inbound[n] == 0:
                    q.append(n)
        return  visited == numCourses

视频讲解 YouTube<--欢迎点击订阅

视频讲解 bilibili<--欢迎点击订阅