深度优先遍历(DFS)和广度优先遍历(BFS)是图的两种经典遍历算法:DFS沿着一条路径深入探索到底再回溯,适合解决迷宫类问题;BFS逐层扫描相邻节点,适合寻找最短路径。
-
深度优先遍历(DFS)原理
- 从起始节点出发,沿着一条路径不断深入,直到无法继续为止,然后回溯到上一个分叉点。
- 通常借助栈(递归或手动维护)实现,遍历顺序可能因实现方式不同而变化。
- 适用场景:拓扑排序、连通性检测、回溯算法(如八皇后问题)。
-
广度优先遍历(BFS)原理
- 从起始节点开始,先访问所有相邻节点,再逐层向外扩展,类似于“波浪式”搜索。
- 通过队列实现,保证先发现的节点先被访问,适合无权图的最短路径查找。
- 适用场景:社交网络好友推荐、最短路径(如Dijkstra算法基础)、网页爬虫层级抓取。
-
核心差异对比
- 数据结构:DFS用栈,BFS用队列。
- 空间复杂度:BFS在稠密图中可能消耗更多内存(需存储层级节点)。
- 结果特性:DFS可能更快找到深层目标,BFS保证找到的路径是最短。
实际应用中,选择DFS还是BFS需权衡问题需求——追求效率选DFS,需要最短路径则用BFS。