第8章|图与并查集
Unit 02 · LeetCode #733 图像渲染
仅本次页面有效
U02
Flood Fill on an Implicit GraphPixel → Four Neighbors → Recolor on Enqueue
二维网格没有画边,
但每个像素仍然生活在一张图里。
本单元把 Unit 01 的显式邻接表迁移到隐式网格图:坐标是节点,上下左右是候选边,只有与起点原颜色相同的像素才属于本次连通分量。新颜色不仅是输出,也可以承担 visited 标记。
检测到上次学习现场阶段、案例、动画步、问题、槽位、迁移脚手架、代码高度和滚动位置均可恢复。
LeetCode #733 图像渲染
给定一个由整数表示像素颜色的 m × n 图像、起点 (sr, sc) 和目标颜色 color。从起点开始,将所有通过上下左右路径连接、且颜色与起点原颜色相同的像素改为目标颜色,返回修改后的图像。
示例 1
image = [[1,1,1],[1,1,0],[1,0,1]]
sr = 1, sc = 1, color = 2
输出 = [[2,2,2],[2,2,0],[2,0,1]]
示例 2
image = [[0,0,0],[0,0,0]]
sr = 0, sc = 0, color = 0
输出 = [[0,0,0],[0,0,0]]
约束与 Python 签名
1 ≤ m, n ≤ 50
0 ≤ image[i][j], color < 2^16
0 ≤ sr < m
0 ≤ sc < n
class Solution:
def floodFill(self, image, sr, sc, color):
...
连通只允许共享边的四方向,不包含对角线。
original_color
起点进入算法前的颜色。搜索期间保持不变,用于判断一个邻居是否属于原连通分量。
queue
已经发现、已经染色,但尚未展开四个邻居的像素坐标。
image == color
当新旧颜色不同,染色本身等价于 visited:已染色像素不会再次满足原色条件。
Implicit Graph
边没有存进邻接表,而是通过坐标加减即时生成。
Four-directional
合法邻居只能是上、下、左、右,共享角的像素没有边。
Recolor on Enqueue
像素入队前立即染色,防止被多个父像素重复加入队列。
Early Return
原颜色等于目标颜色时直接返回,否则染色无法充当访问标记。
认知任务 1
先把像素翻译成节点和边
网格没有显式邻接表;当前坐标的上下左右就是候选邻居,再由边界和颜色条件过滤。
隐式网格图步骤 1
选择案例并逐步运行。
阶段 1 / 6
第八章 Unit 02 · Skill 卡
网格搜索仍然是图遍历。坐标是节点,四方向生成邻居;original_color 决定连通分量边界,队列维护搜索前沿,入队前染色同时完成输出修改和访问标记。
Graph Model像素坐标是节点,四方向是候选边
Membership颜色必须等于起点原颜色
Visited新旧颜色不同,可用染色代替集合
Boundary先检查坐标合法,再读取像素
Stop队列耗尽,原连通分量已全部处理
Complexity时间 O(mn),队列空间最坏 O(mn)
完成后停留在当前页面
不会倒计时或自动跳题。可以返回任何阶段重播动画、继续调整迁移代码,或手动进入 Unit 03。