leetcode(60)-课程表

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

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

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

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

class Solution:
    def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:
        can_learn = [[] for _ in range(numCourses)]
        learn = [None for _ in range(numCourses)]
        sets = []
        for (first,last) in  prerequisites:
            if first>= last:
                sets.append(last)
            can_learn[first].append(last)
        def f(i):
            if learn[i] is not None:return learn[i]
            pre_c = can_learn[i]
            learn[i] = False
            for each in pre_c:
                if not f(each):
                    return False
            learn[i] = True
            return True
        for  i in sets:
            if learn[i] == True:continue
            learn[i] = f(i)
            if learn[i]==False:
                return False
        return True
        
posted @ 2020-10-22 14:30  木子士心王大可  阅读(87)  评论(0)    收藏  举报