第8章|图与并查集

Unit 01 · LeetCode #1971 寻找图中是否存在路径

仅本次页面有效
U01
Reachability with BFSEdge List → Adjacency List → Frontier → Visited

“不是直接相邻”,
也可能沿着一串边到达。

本单元把 Unit 00 的图语言落到第一道正式图题:先把无向边数组转成邻接表,再从 source 启动 BFS。学习重点不是记住模板,而是明确队列与 visited 各自代表什么,以及为什么通常要在节点入队时完成标记。

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

本题需要建立的状态契约

  • graph[u]:与节点 u 直接相邻的全部节点;
  • queue:已发现但尚未处理的节点;
  • visited:已经发现、不会再次入队的节点;
  • 队列耗尽:从源点可达的全部节点已经被发现。

图遍历建模模板

节点:0 ... n - 1 边:edges 中的双向连接 起点:source 目标:destination 前沿:queue 历史:visited 停止:到达目标 / 前沿耗尽
Reachability

判断是否存在一条路径,不要求路径最短,也不要求输出路径本身。

Adjacency List

把边数组编译为每个节点的邻居列表,才能高效扩展当前节点。

Mark on Enqueue

节点首次入队时立即加入 visited,保证它最多进入队列一次。

Connected Component

从 source 启动的一次完整搜索,恰好覆盖 source 所在连通分量。

认知任务 1
先把边数组编译成邻接表
输入告诉你有哪些边,搜索过程需要快速得到当前节点的全部邻居。
无向图编译器案例 1 / 4
选择案例并逐步运行。
状态依赖问题1 / 3
当前观察提示
先观察一条无向边如何写入两个方向。
阶段 1 / 6

第八章 Unit 01 · Skill 卡

边数组不是搜索结构。先构造无向邻接表,再用队列维护搜索前沿;节点在首次入队时标记访问。到达目标即可返回,队列耗尽则说明目标不在源点所在连通分量中。

Graph Build每条无向边写入两个方向
Frontierqueue 保存已发现但尚未展开的节点
Visited入队时标记,避免重复入队
Stop命中 destination 或队列耗尽
Correctness每个可达节点最终都会被发现
Complexity时间 O(V+E),空间 O(V+E)
完成后停留在当前页面

不会倒计时或自动跳转。可以返回任何阶段复盘动画、继续调整迁移代码,或手动进入 Unit 02。

手动进入 Unit 02