📅  最后修改于: 2023-12-03 15:23:34.168000             🧑  作者: Mango
本文介绍如何在无向图中打印给定源和目标之间的所有最短路径。我们将使用广度优先搜索算法来实现这个功能。
广度优先搜索算法是一种基于队列的搜索算法,用于遍历或搜索树或图。它从指定的起始节点开始探索图,逐层遍历直到找到目标节点或遍历完整个图。
我们将使用以下步骤来实现打印给定源和目标之间的所有最短路径:
from collections import deque
def bfs_shortest_path(graph, start, end):
queue = deque([start])
visited = {start}
predecessor = {start: []}
while queue:
current_node = queue.popleft()
if current_node == end:
paths = []
while end in predecessor:
path = [end]
for node in predecessor[end]:
path.insert(0, node)
paths.append(path)
end = path[0]
return paths
for neighbor in graph[current_node]:
if neighbor not in visited:
visited.add(neighbor)
queue.append(neighbor)
predecessor[neighbor] = [current_node]
elif neighbor in predecessor and current_node not in predecessor[neighbor]:
predecessor[neighbor].append(current_node)
return []
以上代码实现了广度优先搜索算法来寻找两点之间的最短路径。程序会返回一个包含所有最短路径的列表。
通过使用广度优先搜索算法,我们可以轻松地找到两点之间的最短路径。而且,我们还可以通过回溯字典中的记录,找到所有的最短路径。