LC 速查

HOT 100索引 › B9 图论 Graph

LC 207课程表Course Schedule 中等

给定 numCourses 门课与先修关系 [a, b](修 a 前须先修 b),判断能否修完全部课程,本质是有向图是否无环。

思路 拓扑排序 Kahn:统计入度,入度为 0 的课程入队,修完一门把后继入度 -1;最后修完数等于课程数则有解。O(V+E)。

class Solution:
    def canFinish(self, numCourses: int,
                  prerequisites: List[List[int]]) -> bool:
        g = [[] for _ in range(numCourses)]
        indeg = [0] * numCourses
        for a, b in prerequisites:
            g[b].append(a)
            indeg[a] += 1
        q = [i for i in range(numCourses) if indeg[i] == 0]
        cnt = 0
        while q:
            cur = q.pop()
            cnt += 1
            for nxt in g[cur]:
                indeg[nxt] -= 1
                if indeg[nxt] == 0:
                    q.append(nxt)
        return cnt == numCourses
← 上一题 腐烂的橘子实现 Trie (前缀树) 下一题 →