数据结构与算法演示台SUANFA.NET.CN · STEP BY STEP

图 · 单步演示

深度优先搜索(DFS)

从起点出发,沿着一个没访问过的邻居一直往深处走,走到没路了就退回上一个顶点,换下一个邻居继续。递归调用栈记下了回退的路线。

写成 A-B:4(带权)或 A-B(权按 1 算),逗号或空格隔开;最多 10 个顶点、20 条边,权为 0 到 999。 输入只在你的浏览器里计算,不会上传。

ABCDEFG
调用栈(底 → 顶)(空)
访问顺序(空)

步 001 / 038从 A 出发做深度优先搜索:一条路走到底,走不动了再退回上一个岔口。邻居按名称顺序处理。

键盘: 单步,空格 播放/暂停(先点一下演示区)。

伪代码 · 当前行高亮

  1. DFS(u):
  2. 标记 u;访问 u
  3. for v in u 的邻居(按名称顺序)
  4. if v 未访问:DFS(v)

变量

u
递归深度0
已访问[]

复杂度

最好情况O(V + E)
平均情况O(V + E)
最坏情况O(V + E)
额外空间O(V)

邻接表下每个顶点进入一次、每条边从两端各看一次。递归深度最多 V 层。

要点

  • 找连通块、判断有没有环、拓扑排序都建立在 DFS 上。
  • 同一张图,DFS 与 BFS 的访问顺序一般不同,把两个演示用同样的输入对照着看。

常见错误

图很大时递归层数可能超过语言的调用栈上限,这时要改用显式的栈来写。

同一类的其他演示