第8章|图与并查集

Unit 03 · LeetCode #200 岛屿数量

仅本次页面有效
U03
Outer Scan + Component SearchDiscover Start → Flood One Island → Resume Scan

一块陆地不是一座岛,
一次完整搜索才对应一个连通分量。

Unit 02 已经学会从给定起点扩散一个区域。本单元增加外层扫描:只有扫描到“尚未被任何搜索覆盖的陆地”时,岛屿数才加一;随后必须先淹没整座岛,再恢复扫描。

检测到上次学习现场阶段、案例、动画步、问题、槽位、迁移脚手架、代码高度与滚动位置均可恢复。

LeetCode #200 · 岛屿数量

给定一个由字符 '1'(陆地)和 '0'(水)组成的 m × n 二维网格,返回岛屿数量。岛屿由水平或垂直相邻的陆地组成,网格四周视为被水包围。

示例 1 [["1","1","1","1","0"], ["1","1","0","1","0"], ["1","1","0","0","0"], ["0","0","0","0","0"]] 输出:1 示例 2 [["1","1","0","0","0"], ["1","1","0","0","0"], ["0","0","1","0","0"], ["0","0","0","1","1"]] 输出:3

约束与 Python 签名

m == grid.length n == grid[i].length 1 ≤ m, n ≤ 300 grid[i][j] 为 '0' 或 '1' class Solution: def numIslands(self, grid): ...

本实验采用 BFS,并原地把已发现陆地改为 '0',从而复用网格作为访问状态。

扫描指针

按行检查所有坐标,负责寻找尚未归属任何岛屿的陆地起点。

queue

当前岛屿中已经发现、已经标记,但尚未展开四个邻居的格子。

islands

已经启动并完成或正在完成的连通分量搜索次数,而不是已访问陆地格子数。

Connected Component

任意两点之间存在路径,且与外部其他节点不连通的一组节点。

Outer Scan

一次搜索只能覆盖一个分量,因此需要扫描所有格子以发现其他起点。

Mark on Enqueue

陆地入队前立即标成水,防止同一格子被多个邻居重复入队。

Four-directional

只允许上下左右连接;对角线接触不属于同一座岛。

连通分量实验步骤 1

第八章 Unit 03 · Skill 卡

连通分量计数 = 外层发现起点 + 内层完整覆盖分量。只有尚未访问的陆地才能启动新搜索并令答案加一;同一岛屿中的后续陆地会在搜索中被提前标记,因此外层扫描再次遇到时不会重复计数。

Graph Model陆地格子是节点,四方向同为陆地时存在边
Outer Loop扫描所有坐标,发现每个新分量
Inner Search一次 BFS 完整淹没一座岛
Count搜索启动次数等于岛屿数量
Visited入队前把 '1' 改为 '0'
Complexity时间 O(mn),队列空间最坏 O(mn)
完成后停留在当前页面

不会倒计时或自动跳题。可以返回任意阶段重播扫描与扩散,或继续调整迁移代码。

手动进入 Unit 04