python广度优先搜索(BFS)算法
BFS是一种用于图的遍历或搜索算法,它从根节点(选择某个任意节点作为起点)开始,首先访问其所有邻居节点,然后再依次访问这些邻居节点的未访问邻居节点
from collections import deque
def bfs(graph, start):
# 记录已访问的节点
visited = set()
# 初始化队列,并将起始节点加入队列
queue = deque([start])
visited.add(start)
# 当队列不为空时继续循环
while queue:
# 从队列中取出并访问队首节点
vertex = queue.popleft()
print(vertex, end=" ")
# 遍历当前节点的所有邻居节点
for neighbour in graph[vertex]:
if neighbour not in visited:
# 如果邻居节点未被访问,则标记为已访问并加入队列
visited.add(neighbour)
queue.append(neighbour)
# 示例图
graph = {
'A': ['B', 'C', 'D'],
'B': ['E', 'F'],
'C': ['G'],
'D': [],
'E': [],
'F': [],
'G': []
}
# 调用BFS函数并传入图和起始节点
bfs(graph, 'A')
1.导入模块
from collections import deque
2.定义BFS函数
def bfs(graph,start):
定义一个名为 bfs
的函数,接收两个参数:图 graph
和起始节点 start
。
3.初始化数据结构:
visited = set()
queue = deque([start])
visited.add(start)
4.处理队列中的节点:
while queue:
vertex = queue.popleft()
print(vertex,end=" ")
5.遍历邻居节点:
for neighbour in graph[vertex]:
if neighbour not in visited:
visited.add(neighbour)
queue.append(neighbour)
对于当前节点vertex 的每一个邻居节点 neighbour,如果该邻居节点尚未被访问过,则将其标记为已访问,并加入队列
6.示例图:
graph = {
'A':['B','C','D'],
'B':['E','F'],
'C':['G'],
'D':[ ],
'E':[ ],
'F':[ ],
'G':[ ]
}
这是一个简单的无向图,表示了各个节点及其连接关系
7.调用bfs函数
bfs(graph,'A')
以节点 'A'
作为起始节点,对给定的图执行广度优先搜索。