在上周学习中遇到了一道深度优先搜索的题 然后就去把深度优先搜索简称DFS学习了一下,因为还有一个广度优先搜索(BFS)与其相通,所以都了解了一下,以下是对其的一些简单介绍。
深度优先搜索(DFS)
- 算法思想:从起始顶点开始,沿着一条路径尽可能深地探索,直到无法继续或达到目标顶点,然后回溯到前一步,继续探索其他路径,直到遍历完所有顶点或找到目标。
- 实现方式:通常使用递归或栈来实现。递归实现简洁直观,利用函数调用栈来保存状态;栈实现则更显式地管理顶点的访问顺序。
- 应用场景:适用于需要快速找到一条从起始点到目标点的路径,如迷宫求解、拓扑排序、判断图中是否存在环等。
广度优先搜索(BFS)
- 算法思想:从起始顶点开始,逐层地向外扩展搜索,先访问距离起始顶点近的顶点,再逐步访问距离更远的顶点,直到遍历完所有顶点或找到目标。
- 实现方式:一般使用队列来实现。将起始顶点加入队列,然后不断取出队列头部的顶点进行访问,并将其未访问的邻接顶点加入队列,直到队列为空。
- 应用场景:常用于求最短路径问题、网络流问题、图的连通性判断等,如在社交网络中查找与某个人距离为k的所有用户。