广度优先搜索(Breadth-First Search,简称BFS)是一种用于图遍历或搜索树等数据结构的算法。这种算法从根节点开始,一层层向外扩展,先访问离根节点最近的节点,然后再访问更远的节点。广度优先搜索能够保证在有限状态机中找到最短路径。
定义:
广度优先搜索是一种先遍历最近的节点,再逐渐向外扩展的遍历策略。
原理:
- 初始化:创建一个队列,并将起始节点放入队列中。
- 遍历过程:循环执行以下步骤直到队列为空:
- 从队列中取出一个节点。
- 访问该节点。
- 将该节点的所有未被访问过的邻接节点放入队列中。
- 标记:为了避免重复访问,通常需要一个额外的数据结构来标记已访问的节点。
用途:
- 寻找最短路径:在无权图中,广度优先搜索可以用来找到从起点到终点的最短路径。
- 拓扑排序:在DAG(有向无环图)中,广度优先搜索可以用来进行拓扑排序。
- 解决问题:在游戏、迷宫等领域,可以用来找到从起点到终点的可行路径。
Python代码示例:
下面是一个使用广度优先搜索在无权图中寻找最短路径的Python代码示例:
from collections import deque
def bfs(graph, start):
visited = set