图(Graph)的广度优先搜索算法在Python中的实现
发布时间:2024-01-11 05:03:44
广度优先搜索算法(Breadth First Search,简称BFS)是一种用于图的遍历的算法,它从图中的一个顶点(起始顶点)开始,按照宽度优先的方式扩展层级,访问所有与起始顶点直接相连的顶点,然后再按照广度优先的方式访问这些顶点的相邻顶点,直到遍历完整个图。
在Python中,可以使用队列(Queue)数据结构来实现BFS算法。下面是BFS算法在Python中的实现,并附带一个使用例子:
from collections import deque
def bfs(graph, start):
visited = set() # 记录已访问的顶点
queue = deque([start]) # 创建一个队列,起始顶点入队列
while queue:
vertex = queue.popleft() # 出队列一个顶点
if vertex not in visited:
print(vertex) # 访问该顶点
visited.add(vertex)
for neighbor in graph[vertex]:
if neighbor not in visited:
queue.append(neighbor) # 将与该顶点直接相连的未访问过的顶点入队列
上述代码中,graph表示输入的图,它以字典的形式表示,每个顶点作为键,与之相邻的顶点列表作为值。start表示BFS算法的起始顶点。
下面是一个使用例子,假设有以下图:
graph = {
'A': ['B', 'C'],
'B': ['A', 'D', 'E'],
'C': ['A', 'F'],
'D': ['B'],
'E': ['B', 'F'],
'F': ['C', 'E']
}
我们可以以顶点'A'作为起始顶点,调用bfs(graph, 'A')进行广度优先搜索:
graph = {
'A': ['B', 'C'],
'B': ['A', 'D', 'E'],
'C': ['A', 'F'],
'D': ['B'],
'E': ['B', 'F'],
'F': ['C', 'E']
}
bfs(graph, 'A')
输出结果为:
A B C D E F
这表示按照广度优先的方式遍历了该图的所有顶点。
总结来说,BFS算法可以在Python中通过使用队列数据结构来实现。它从起始顶点开始,逐层扩展并访问与当前顶点直接相连的顶点,直到遍历完整个图。
