一、深度优先搜索(DFS)
1、搜索过程:
DFS 会沿着一条路径探索到底,直到无法继续,然后回溯到之前的分叉点继续探索其他路径。
2、实现方式:
DFS可以通过递归或使用栈来实现。
3、空间复杂度
相比于BFS,DFS通常有更低的空间复杂度,因为它不需要存储所有层的节点;只需存储一条从根节点到当前节点的路径。
4、应用场景:
DFS 常用于解决路径问题,如找到图中的一条路径
,或者在状态空间中找到解决方案
。它也适用于需要找出所有解决方案
的问题,例如在图中找出所有从起点到终点的路径。
5、常见DFS解决的算法问题
拓扑排序、迷宫问题(走出迷宫的所有方案)、连通性问题(求连通分量)、回溯问题(八皇后、数独)、组合问题(子集问题或排列问题)、树和图的深度优先遍历。
二、广度优先搜索(BFS)
1、搜索过程
BFS 从起始节点开始,逐层向外扩展搜索,先访问所有邻近的节点,再逐步访问更远的节点。
2、实现方式:
DFS可以通过队列来实现。
3、空间复杂度
相比于DFS,BFS需要额外的空间来存储同一层的所有节点,特别是在宽度广的图中,这会导致较高的空间复杂度。
4、应用场景
BFS 通常用于解决最短路径问题
,或者在状态空间中找到距离起始状态最近的状态
。
5、常见BFS解决的算法问题
最短路径问题(如迷宫最短路径,社交网络中两个人的最短联系路径)、连通性问题(确定图的连通性,确定两个节点之间是否存在路径)、树和图的层序遍历、增广路径问题。