大佬图示
可以正确执行

会形成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
