直接回答
BFS 按层扩展,用队列实现,先访问离起点近的节点;DFS 沿一条路径走到底再回溯,用栈(或递归)实现。两者的核心差异在搜索顺序和数据结构,时间复杂度都是 O(V+E)。
展开解析
场景选择:BFS 第一次到达目标的路径边数最少,因此适合无权图最短路径、最少步数类问题(如迷宫最少步、单词接龙)、层级处理(二叉树层序、按层打印);代价是队列可能很宽,空间 O(层宽)。DFS 空间 O(深度),适合路径枚举与回溯(全排列、N 皇后)、连通性/拓扑排序、环检测、以及解在深处或只需任意一个解的问题。易错点:BFS 的访问标记要在入队时打而不是出队时,否则同一节点重复入队,队列爆炸;DFS 递归爆栈要改显式栈。追问方向:双向 BFS 优化状态空间搜索、迭代加深 DFS(IDDFS)兼顾两者、A* 在 BFS 基础上加启发函数。