Python怎么实现图的广度和深度优先路径搜索算法

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。

后端开发标签