先把坐标点编译成带权完全图
输入只给了点,没有直接给边。任何两点都可以连接,因此需要枚举每个点对,并用曼哈顿距离生成边权。
节点是什么?
数组下标 0..n−1 是稳定节点身份;坐标只是节点属性。即使两个点到其他点的距离相同,它们仍是不同节点。
边是什么?
任意两个不同点 i、j 之间都存在一条无向候选边,因此 n 个点会生成 n(n−1)/2 条边。
权重是什么?
cost(i,j)=|xᵢ−xⱼ|+|yᵢ−yⱼ|。本题必须使用曼哈顿距离。
从最便宜的边开始,但每次都要做“成环审查”
排序只决定候选边到达顺序;并查集决定该边是否有资格进入结果。
并查集不是附属工具,而是“当前森林”的压缩表示
图上已经接受的绿色边与 parent 森林必须表达同一个连通关系。
排序保证当前边是尚未审查边中权重最小者。
两端不同根,说明它连接两个独立树。
跨分量连接不会产生闭合路径。
无环且覆盖 n 个点时得到一棵生成树。
看起来合理的局部贪心,为什么会破坏全局结构?
选择一个错误实验,观察被破坏的是距离定义、无环契约、停止条件还是费用累计。
正确局部决策
在所有尚可扩展的边中,选择权重最小且连接不同分量的边。
错误局部决策
只看“这条边很短”,却不检查它是否重复连接已经连通的区域。
复杂度账本
完全图有 O(n²) 条边;显式生成并排序边的 Kruskal 实现约为 O(n² log n)。
先恢复功能槽位,再补关键表达式,最后独立完成
把完整 Kruskal 演示逐步撤掉:先从语义恢复代码骨架,再用真实轨迹校准状态,最后关闭脚手架。
左侧只描述“这一段代码负责什么”;右侧候选只显示代码,顺序每次新学习现场随机。
不适用
不适用
—
—
状态依赖问题|主工作区下方整行
当前候选边两端已经同根时,哪一组状态应该保持不变?
关键代码补全
独立完成 #1584
迁移到 LeetCode #1631:从“最小生成树”迁移到“首次连通阈值”
保留“边权升序 + 并查集”骨架,只改节点、边、停止条件和返回量。
给定高度矩阵,从左上角走到右下角。路径体力为沿途相邻格高度差绝对值的最大值,求可能路径中的最小体力。
#1584
- 全部点连通
- 累加接受边权
- n−1 条边停止
#1631
- 只关心起点与终点
- 不累加边权
- 首次同根立即返回当前 effort
第八章 Unit 13 Skill 卡
完成主问题和迁移问题的渐隐脚手架后,可完成本单元。
坐标点对和网格邻接都能生成带权边。
边权升序 + 并查集决定接受或拒绝。
MST 看 n−1 条边;阈值题看目标节点首次同根。