图搜索

深度优先搜索

深度优先搜索(DFS)和 BFS 是兄弟算法——只把队列换成栈就成了 DFS。区别在视觉上很直观:DFS 顺着一条路一头扎到底,撞墙了才回溯到上一个岔路口换方向。

和 BFS 比

BFSDFS
容器队列(先进先出)栈(后进先出)
扩散形状同心圆波纹蛇形细线
路径最短找到一条就停(不一定最短)
内存O(宽度)O(深度)

工作方式

  1. 从起点开始,把它压入栈
  2. 反复取栈顶的格子,朝一个未访问的方向走一步——压栈
  3. 如果当前格子没有未访问的方向了,弹栈(回溯)
  4. 直到找到终点或栈空

复杂度

  • 时间:O(V + E)
  • 空间:O(V) 最差(链状深度)

在动画里看什么

  • 蛇形渐变色:访问顺序,能清楚看到 DFS 一头扎到底的形状
  • 深蓝脉冲边框:当前调用栈(从起点到正在探索的格子的整条路径)
  • 回溯那一刻:栈顶弹出,脉冲边框收缩
  • 暖红路径:找到终点后的连线(注意:未必是最短的)

试一下

清空所有墙再运行一次——你会看到 DFS 直接顺着第一个方向(右)跑到底,撞到右边界再回溯。给中间加几道墙挡一挡,能看到它在迷宫里”摸着墙走”的特征。