207. 课程表 - 力扣(LeetCode)


from collections import deque
class Solution:
def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:
# 构建邻接表 & 计算入度
graph = {i: [] for i in range(numCourses)}
in_degree = [0] * numCourses
for a, b in prerequisites:
graph[b].append(a)
in_degree[a] += 1 # 计算入度
# 将入度为 0 的课程加入队列
queue = deque([i for i in range(numCourses) if in_degree[i] == 0])
count = 0 # 统计已完成课程数
while queue:
curr = queue.popleft()
count += 1 # 完成该课程
for next_course in graph[curr]:
in_degree[next_course] -= 1 # 减少后续课程的入度
if in_degree[next_course] == 0:
queue.append(next_course) # 继续学习入度为 0 的课程
return count == numCourses # 如果所有课程都能完成,则返回 True