1. 图的广度优先搜索算法
广度优先搜索算法,也叫BFS(Breadth First Search),是一种用于图的搜索算法。它从图的某一节点开始,逐层扩展,先访问离起始节点最近的节点,再访问离起始节点稍远一点的节点,依此类推,直到访问到目标节点。广度优先搜索算法使用队列(Queue)来实现节点的扩展和遍历。
1.1 算法步骤
广度优先搜索算法的步骤如下:
创建一个空队列,用于存放待访问的节点。
将起始节点加入队列。
从队列中取出一个节点,并访问该节点。
将该节点的所有未访问过的邻居节点加入队列。
重复步骤3和步骤4,直到队列为空。
下面是一个示例图用于演示广度优先搜索算法:
假设起始节点为A,目标节点为G,那么按照广度优先搜索算法的步骤,遍历顺序将会是A -> B -> C -> D -> E -> F -> G。
1.2 Python代码实现
def bfs(graph, start, end):
visited = set() # 用于存放已访问过的节点
queue = [] # 用于存放待访问的节点
queue.append(start) # 将起始节点加入队列
visited.add(start) # 标记起始节点为已访问
while queue:
node = queue.pop(0) # 从队列中取出一个节点
print(node) # 访问节点
if node == end:
return # 找到目标节点,结束搜索
# 将该节点的邻居节点加入队列
for neighbor in graph[node]:
if neighbor not in visited:
queue.append(neighbor)
visited.add(neighbor)
# 示例图的邻接字典表示
graph = {
'A': ['B', 'C'],
'B': ['A', 'C', 'D', 'E'],
'C': ['A', 'B', 'E'],
'D': ['B', 'E', 'F'],
'E': ['B', 'C', 'D', 'F'],
'F': ['D', 'E', 'G'],
'G': ['F']
}
bfs(graph, 'A', 'G') # 执行广度优先搜索算法
运行上面的代码,输出为:
A
B
C
D
E
F
G
可以看到,按照广度优先搜索算法的规则,节点依次被访问,并且找到了目标节点G。