课程表
"""
你这个学期必须选修numCourses门课程,记为0到numCourses - 1 。
在选修某些课程之前需要一些先修课程。
先修课程按数组prerequisites给出,其中prerequisites[i]=[ai, bi],
表示如果要学习课程ai则必须先学习课程bi 。
例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1 。
请你判断是否可能完成所有课程的学习?如果可以,返回 true ;否则,返回 false
"""
class Solution1:
def canFinish(self, numCourses: int, prerequisites) -> bool:
course = [[] for i in range(numCourses)]
for co in prerequisites:
course[co[1]].append(co[0])
print(course)
for i,content in enumerate(course):
for con in content:
if i in course[con]:
return False
return True
class Solution:
def canFinish(self, numCourses, prerequisites):
iner = [0] * numCourses
course = [[] for i in range(numCourses)]
for co in prerequisites:
course[co[1]].append(co[0])
iner[co[0]]+=1
root, result = [i for i in range(numCourses) if iner[i] == 0], []
print(iner)
print(course)
print(root)
def dfs(node):
result.append(node)
for i in course[node]:
iner[i] -= 1
if iner[i] == 0:
dfs(i)
for x in root:
dfs(x)
return True if len(result) == numCourses else False
pre = [[1,4],[2,4],[3,1],[3,2]]
numCourses = 5
a = Solution()
print(a.canFinish(numCourses,pre))