深度优先搜索DFS

沿一条路径深入,再回退访问未探索分支。

核心约束
已访问状态防止重复探索或无限循环。
适用问题
依赖分析、环检测、连通分量与遍历。
边界与取舍
递归深度可能很大;有向图需区分访问状态。
ABCD
从 A 开始,按 B、C 的邻接顺序:A、B、D,回溯后访问 C;D 已访问,不再重复展开。

时间与空间#

V 为顶点数,E 为边数;邻接表表示,访问时设置标记。

时间复杂度
O(V+E)O(V+E)
辅助空间
O(V)O(V),包括访问状态和最坏递归 / 显式栈

每条邻接边检查有限次;无向图通常保存双向邻接。普通 DFS 不保证最短路径;很深的图可能使语言调用栈溢出。

工程中的应用#

2 个案例 · 附源码
基础原理参考资料

Princeton · DepthFirstPaths递归 DFS 的访问标记、路径状态和复杂度。

2 个概念