DFS

深度优先

图核心时间 O(V+E)空间 O(V)

沿一条路走到底再回溯。适合连通性、拓扑、路径枚举、树形 DP。

动画

ABCDEF

深度优先:沿一条路走到底,再回溯。

1 / 13

  • 当前
  • 默认

讲解

递归结构自然,迷宫、岛屿、排列组合、环检测都靠它。

  1. 01访问 u 并标记。
  2. 02对每个未访问邻居递归 DFS。
  3. 03没有邻居时回溯到上一层。
  4. 04也可用显式栈模拟递归。

易错点

  • 有环必须标记,否则无限递归。
  • 递归深度可能爆栈,图很大时用显式栈。

代码

function dfs(g, u, seen = new Set(), order = []) {
  seen.add(u); order.push(u);
  for (const v of g[u] || []) {
    if (!seen.has(v)) dfs(g, v, seen, order);
  }
  return order;
}

相关课题