第8章|图与并查集

Unit 07 · LeetCode #210 课程表 II

仅本次页面有效
U07
Topological OrderingZero Indegree → Choose → Append → Release → Validate Length

拓扑排序不只证明“能完成”,
还要交出一条完整合法顺序。

Unit 06 只比较处理数量;本单元把每次从零入度前沿中取出的课程写入 order。当前沿同时存在多门课程时,可以任选一门,因此同一张图可能产生多条正确答案。

检测到上次学习现场阶段、案例、零入度前沿、输出序列、代码槽位和迁移进度均可恢复。

LeetCode #210 · 课程表 II

共有 numCourses 门课程,编号为 0 到 numCourses - 1。prerequisites[i] = [a, b] 表示修读课程 a 前必须先完成课程 b。返回一条能够完成全部课程的顺序;若答案不唯一,可返回任意一条;若无法完成,返回空数组。

示例 1 numCourses = 2 prerequisites = [[1,0]] 输出:[0,1] 示例 2 numCourses = 4 prerequisites = [[1,0],[2,0],[3,1],[3,2]] 输出:[0,1,2,3] 或 [0,2,1,3]

约束与 Python 签名

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

本实验采用 Kahn 算法。最终必须检查 len(order) == numCourses,否则环可能留下一个看似合理但不完整的前缀。

Zero-Indegree Frontier

当前所有先修要求均已解除、可以立刻修读的课程集合。

Topological Order

对每条边 u → v,u 在结果中必须早于 v。

Non-uniqueness

前沿中同时有多个节点时,选择不同节点可能产生不同但都合法的答案。

Length Validation

只有输出覆盖全部节点,才能排除依赖环和遗漏分量。

拓扑顺序实验步骤 1

第八章 Unit 07 · Skill 卡

输出拓扑序 = 正确建边 + 收集全部零入度节点 + 每次取出一个合法节点写入 order + 释放后继 + 用结果长度验证是否覆盖全图。前沿有多个节点表示存在局部自由度,而不是算法不确定。

ConnectionUnit 06 的 completed → Unit 07 的 order
Invariantorder 中每个节点已满足全部先修
Choice任意零入度节点均可成为下一项
Validationlen(order) == numCourses
Cycle Result无法覆盖全部节点时返回 []
Complexity时间 O(V+E),空间 O(V+E)
完成后停留在当前页面

不会自动跳转。可以切换选择策略,比较不同合法拓扑序,或返回迁移轨迹继续观察。

手动进入 Unit 08(待补充)