第8章|图与并查集

Unit 06 · LeetCode #207 课程表

仅本次页面有效
U06
Kahn Topological SortBuild Direction → Count Indegree → Remove Zero → Detect Residual Cycle

课程能否修完,取决于依赖图
能否被零入度节点逐步清空。

把先修关系编译成有向边,维护每门课程尚未解除的先修数量。每次完成一门入度为 0 的课程,就释放它的后继;最终仍有课程残留,意味着这些课程被依赖环锁住。

检测到上次学习现场阶段、案例、图状态、问题、槽位、代码、迁移脚手架、编辑器高度和滚动位置均可恢复。

LeetCode #207 · 课程表

共有 numCourses 门课程,编号为 0 到 numCourses - 1。prerequisites[i] = [a, b] 表示要学习课程 a,必须先完成课程 b。若可以完成所有课程,返回 True;否则返回 False。

示例 1 numCourses = 2 prerequisites = [[1,0]] 输出:True 示例 2 numCourses = 2 prerequisites = [[1,0],[0,1]] 输出:False

约束与 Python 签名

1 ≤ numCourses ≤ 2000 0 ≤ prerequisites.length ≤ 5000 prerequisites[i].length == 2 0 ≤ a, b < numCourses 所有先修课程对互不相同 class Solution: def canFinish(self, numCourses, prerequisites): ...

本实验采用 Kahn 算法:反复处理入度为 0 的节点,并以已处理课程数判断是否存在残留环。

graph[prerequisite]

保存完成该先修课后可以解锁的后继课程。

indegree[course]

当前仍未解除的先修课程数量;只有变为 0 才能进入队列。

completed

已经从零入度队列中正式处理的课程数量。

Directed Edge

[course, prerequisite] 编译为 prerequisite → course。

Indegree

指向当前节点的边数,在本题中等于尚未满足的先修数量。

Topological Order

所有依赖都从较早课程指向较晚课程的线性顺序。

Residual Cycle

队列耗尽后仍未处理的节点,其入度无法降为 0,处于环或被环阻塞。

课程依赖实验步骤 1

第八章 Unit 06 · Skill 卡

有向依赖判环 = 正确建边 + 统计入度 + 批量收集零入度节点 + 逐边释放后继 + 检查是否处理全部节点。零入度队列表示当前已经满足全部先修要求的课程;队列耗尽但仍有残留节点,就是不存在完整拓扑序的证据。

Graph Model[a,b] 编译为 b → a
Stateindegree 保存剩余先修数量
Frontier所有入度为 0 的课程同时入队
Update完成课程后递减每个后继入度
Cycle Testcompleted == numCourses
Complexity时间 O(V+E),空间 O(V+E)
完成后停留在当前页面

不会倒计时或自动跳题。可以返回任意阶段重新观察依赖方向、残留环和迁移轨迹。

手动进入 Unit 07