207. 课程表

Medium

思路

前置知识

拓扑排序

解题思路

Krahets大佬解题中的动图相当直观,可以看一下: 链接

以上,尝试写一下代码,AC!

代码

python

class Solution:
  def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:
    adja = [[] for _ in range(numCourses)]
    indeg = [0] * numCourses
    for p in prerequisites:
      indeg[p[0]] += 1
      adja[p[1]].append(p[0])
    queue = []
    for i,d in enumerate(indeg):
      if d == 0:
        queue.append(i)
    nums = 0
    while len(queue):
      cur = queue[0]
      del queue[0]
      nums += 1
      indeg[cur] -= 1
      for a in adja[cur]:
        indeg[a] -= 1
        if indeg[a] == 0:
          queue.append(a)
    return nums == numCourses