#1971 寻找图中是否存在路径
- 节点与边
- 节点是编号顶点,边是输入的无向连接。
- 前沿与更新
- 从起点用栈或队列扩展未访问邻居。
- 维护的关系
- 已发现节点都从起点可达,未发现节点尚不能断言可达。
- 边界检查
- 起终点相同、孤立点与重复边;发现时标记可避免重复加入。
Unit 00 · 图、遍历、连通性、拓扑与并查集基础
本单元先把图的语言、邻接表、显式图与隐式图、DFS/BFS、visited、连通分量、环、拓扑排序、并查集与最小生成树一次梳理清楚。后续每道题都会回到同一组问题:节点是什么?边如何生成?搜索前沿是什么?哪个不变量必须始终成立?
同一个输入可以被解释成不同的图。算法之前先明确节点、边、方向、权值与邻居生成规则。
栈、队列或优先队列保存“已经发现但尚未处理”的节点,它决定搜索顺序。
visited、indegree、color、parent 和 size 都有明确语义;动画会持续检查这些语义是否被破坏。
DFS/BFS 从一个起点探索连通关系;并查集在边动态加入时维护集合归属。
图与并查集:从遍历到连通性,理解图上的关系与依赖。
这里的梯度描述认知任务的递进,不等同于题库的难度标签。点击题目可进入对应单元。
目录中的 Unit 08 实际为动态规划 #62 的跨章资料。#785 判断二分图目前没有独立 HTML;下面提供其框架定位,不把 #62 当作二分图入口。
用同一组问题定位每个单元,再观察迁移题改变了哪个条件。进入写代码环节后,学习地图会收起,留出独立思考的空间。
目录中的 Unit 08 实际为动态规划 #62 的跨章资料。#785 判断二分图目前没有独立 HTML;下面提供其框架定位,不把 #62 当作二分图入口。
给定一个含有 n 个顶点的双向图,顶点编号为 0 到 n - 1。二维数组 edges 中的每个 [u, v] 表示顶点 u 和 v 之间存在一条双向边。
给定 source 和 destination,判断是否存在从源点到目标点的有效路径。存在则返回 True,否则返回 False。
示例 1 输入:n = 3 edges = [[0,1],[1,2],[2,0]] source = 0, destination = 2 输出:true 示例 2 输入:n = 6 edges = [[0,1],[0,2],[3,5],[5,4],[4,3]] source = 0, destination = 5 输出:false
1 <= n <= 2 * 10^50 <= edges.length <= 2 * 10^5source、destination 均在合法编号范围内。Python 签名:def validPath(self, n, edges, source, destination) -> bool
Unit 00 的代码实验返回完整最短路径;#1971 只需要判断可达。迁移时应先识别哪些状态可以删除,而不是从空白编辑器重新发明整个算法。
| 当前实验 | #1971 |
|---|---|
| 返回节点路径 | 返回布尔值 |
| 需要 parent | 不需要 parent |
| 到达目标后重建路径 | 到达目标立即 True |
| 前沿耗尽返回 [] | 前沿耗尽返回 False |
看到新题时,先填完下面的模型,再决定使用 DFS、BFS、拓扑排序、并查集、最小生成树或带权路径算法。
页面不会倒计时或自动跳转。可以返回任意环节复盘动画,也可以继续完善迁移代码。