深度优先搜索
DFS 采用纵深优先策略,使用递归(或显式栈)探索图,通过发现时间 和完成时间 记录探索过程,产生括号结构、边分类和白色路径定理等核心性质,时间复杂度 。
定义
深度优先搜索(DFS)
DFS 从图中未访问的顶点出发,沿着一条路径尽可能深入探索,直到无法继续时回溯。算法为每个顶点 记录发现时间 和完成时间 ,以及颜色(WHITE/GRAY/BLACK)和前驱 。
DFS 边分类(有向图)
在 DFS 过程中,每条边 根据探索时 的颜色被分为四类:
- 树边(Tree Edge): 为 WHITE, 第一次被发现
- 后向边(Back Edge): 为 GRAY, 是 的祖先
- 前向边(Forward Edge): 为 BLACK 且 , 是 的后代
- 横边(Cross Edge): 为 BLACK 且 , 和 无祖先-后代关系
核心性质
| 性质 | 描述 |
|---|---|
| 括号定理 | 任意两顶点的时间戳区间要么完全不相交,要么一个包含另一个 |
| 白色路径定理 | 是 的后代,当且仅当在 时刻存在从 到 的全白色路径 |
| 无向图边分类 | 只有树边和后向边两类,不存在前向边和横边 |
| 后向边与环 | 有向图中后向边等价于存在有向环 |
| 时间复杂度 | 邻接表 ,邻接矩阵 |
关系网络
graph LR A["深度优先搜索"] --> B["栈/递归"] A --> C["图的表示"] A --> D["拓扑排序"] A --> E["强连通分量"] A --> F["环检测"]
章节扩展
第20章:基本图算法
算法流程: 全局初始化所有顶点为 WHITE,。对每个 WHITE 顶点调用 DFS-VISIT:记录发现时间 ,标记 GRAY,递归探索所有 WHITE 邻居,完成后标记 BLACK,记录完成时间 。
定理 22.7(括号定理): 对任意两顶点 、,时间戳区间 与 要么不相交,要么一个完全包含另一个。包含关系对应祖先-后代关系。证明通过对 DFS-VISIT 调用次数归纳—— 的后代在 之后被发现、 之前完成,因此区间嵌套在 中。
定理 22.9(白色路径定理): 是 的后代,当且仅当在 时刻存在从 到 的全白色路径。必要性由 DFS 树路径在 时刻全为 WHITE 得出;充分性对路径长度归纳—— 的 WHITE 邻居 必在 的 DFS-VISIT 完成前被发现,由归纳假设 是 的后代。
定理 22.10(无向图边分类): 无向图 DFS 中每条边要么是树边,要么是后向边。关键观察:当从 检查邻居 时, 不可能为 BLACK 且 (否则 在 之前被发现时, 为 WHITE, 已是树边, 是 GRAY)。
补充
DFS 的历史
DFS 的形式化描述归功于 Robert Tarjan(1972),其论文 “Depth-first search and linear graph algorithms” 首次系统阐述了 DFS 的理论框架,包括时间戳、边分类和 DFS 树。Tarjan 因此获得 1986 年图灵奖。