深度优先搜索(DFS)

沿着一条路尽量往深处走,走不下去再回到上一个岔路口,以此探索整个图。屏幕上的栈就是这条路。

  • 时间 O(V + E)
  • 内存 O(V)
  • 使用栈
这些是什么意思?
  • 顶点:图中的一个点,这里画成带字母的圆圈。
  • 边:连接两个顶点的线。这里两个方向都能走。
  • 邻居:通过一条边与某个顶点相连的顶点。按字母顺序查看。
  • 队列:先进先出。BFS 总是取出等得最久的顶点。
  • 栈:后进先出。DFS 总是从最后到达的顶点继续往下走。
  • V 和 E:顶点数和边数。O(V + E) 表示每个顶点和每条边只被处理固定的次数。
0 / 60 步
  • 在栈中
  • 当前
  • 已完成
  • 搜索树的边
  • 跳过的边

从 A 开始。点击播放,或一步一步查看搜索过程。

空格键:播放或暂停。左右方向键:单步移动。Home 和 End 键:跳转。

试试看: 选择有环的图。每条虚线边都通向一个已在栈中或已完成的顶点:这条边让一个环闭合。

工作原理

DFS 对第一个还没见过的邻居调用自身,再对那个顶点的第一个新邻居调用自身,依此类推。当一个顶点没有新邻居时,它的调用结束,DFS 退回一步,去试那里的下一个邻居。尚未结束的调用组成一个栈,它始终是从起点到当前顶点的路径。顶点旁边的数字是它被访问的顺序。

适用场合

想知道到底能到达哪些顶点、查找环、走迷宫,或给相互依赖的任务排顺序时,用 DFS。它找不到最短路径。

© 2026 Developer Toolbox. 保留所有权利。 关于