def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:
# 检查入度
in_list = [0 for _ in range(numCourses)]
# 记录邻接顶点
dic = {i:[] for i in range(numCourses)}
# 访问记录
visit = [0 for _ in range(numCourses)]
# 初始化邻接表和入度
for l in prerequisites:
dic[l[-1]].append(l[0])
in_list[l[0]] += 1
# print(in_list,dic)
while sum(in_list) > 0:
target = True
for idx in range(numCourses):
# 取出入度为0的顶点,将其邻接顶点的入度-1
if in_list[idx] == 0 and visit[idx] == 0:
target = False
visit[idx] = 1
for i in dic[idx]:
in_list[i] -= 1
# 若此时无入度为0的节点,则无法进行拓补排序
if target: return False
return True