第8章|图与并查集

Unit 10 · LeetCode #547 省份数量

仅本次页面有效
U10
Connected Components · DSUMatrix → Find Roots → Union Sets → Count Components

省份不是“直接相连的边数”,
而是传递连通后的集合数量。

同一张城市关系图既可以通过 DFS/BFS 逐个搜索连通分量,也可以通过并查集不断合并集合。本单元作为章节转折点:先用熟悉的遍历理解“省份”,再把这个语义压缩到 parent / size / components 三组状态中。

检测到上次学习现场阶段、案例、矩阵扫描、父指针、代码槽位与迁移进度都可恢复。

LeetCode #547 · 省份数量

有 n 个城市。若城市可以直接或间接互相到达,它们属于同一个省份。给定 n × n 矩阵 isConnected,其中 isConnected[i][j] == 1 表示城市 i 与城市 j 直接相连。返回省份总数。

示例 1 输入:isConnected = [[1,1,0],[1,1,0],[0,0,1]] 输出:2 示例 2 输入:isConnected = [[1,0,0],[0,1,0],[0,0,1]] 输出:3

约束与 Python 签名

1 ≤ n ≤ 200 n == isConnected.length n == isConnected[i].length isConnected[i][j] ∈ {0, 1} isConnected[i][i] == 1 isConnected[i][j] == isConnected[j][i] class Solution: def findCircleNum(self, isConnected): ...

矩阵关于主对角线对称,因此扫描无向边时只需考虑 i < j 的上三角区域。

Connected Component

任意两点可通过路径互达、且无法再加入外部节点的一组节点。

Representative / Root

并查集中一个集合的代表节点;两个城市根相同,表示已经连通。

Path Compression

find 返回根的同时缩短父指针路径,让后续查询更快。

Union by Size

把较小集合的根挂到较大集合的根下,避免父指针树过深。

矩阵与城市图步骤 1