207. 课程表 - 力扣(LeetCode)

大佬图示

可以正确执行

会形成Loop

代码

python 复制代码
# encoding = utf-8
# 开发者:Alen
# 开发时间: 21:13 
# "Stay hungry,stay foolish."

class Solution(object):
    def canFinish(self, numCourses, prerequisites):
        """
        :type numCourses: int
        :type prerequisites: List[List[int]]
        :rtype: bool
        """
        preMap = [[] for _ in range(numCourses)]

        for crs, pre in prerequisites:
            preMap[crs].append(pre)

        # preMap = [
        #     [],      # 课程 0 没有先修课
        #     [0],     # 课程 1 需要先修 0
        #     [0],     # 课程 2 需要先修 0
        #     [1]      # 课程 3 需要先修 1
        # ]

        # visitSet = all courses along the curr DFS path
        visitSet = set()

        def dfs(crs):
            if crs in visitSet:
                return False
            if preMap[crs] == []:
                return True
            visitSet.add(crs)

            for pre in preMap[crs]:
                if not dfs(pre):
                    return False
            visitSet.remove(crs)
            preMap[crs] = []
            return True

        for crs in range(numCourses):
            if not dfs(crs):
                return False
        return True

结果

解题步骤:www.bilibili.com

相关推荐
YuTaoShao2 分钟前
【LeetCode 每日一题】3634. 使数组平衡的最少移除数目——(解法一)排序+滑动窗口
算法·leetcode·排序算法
波波00710 分钟前
每日一题:.NET 的 GC是如何分代工作的?
算法·.net·gc
HY小宝F14 分钟前
职场沟通的深层智慧:从对抗到协作的自我修炼
职场和发展
风暴之零20 分钟前
变点检测算法PELT
算法
深鱼~20 分钟前
视觉算法性能翻倍:ops-cv经典算子的昇腾适配指南
算法·cann
李斯啦果21 分钟前
【PTA】L1-019 谁先倒
数据结构·算法
梵刹古音26 分钟前
【C语言】 指针基础与定义
c语言·开发语言·算法
啊阿狸不会拉杆43 分钟前
《机器学习导论》第 5 章-多元方法
人工智能·python·算法·机器学习·numpy·matplotlib·多元方法
AI职业加油站1 小时前
职业提升之路:我的大数据分析师学习与备考分享
大数据·人工智能·经验分享·学习·职场和发展·数据分析
R1nG8631 小时前
CANN资源泄漏检测工具源码深度解读 实战设备内存泄漏排查
数据库·算法·cann