如何使用Dijkstra算法在Python中计算带权重的图的最短路径?请提供一个具体的代码示例。
时间: 2024-11-14 09:24:06 浏览: 22
Dijkstra算法是图论中非常重要的算法之一,它能够高效地找到图中一个顶点到其他所有顶点的最短路径。在Python中,Dijkstra算法的实现需要对图进行适当的建模,并使用合适的数据结构来存储顶点间的关系和距离信息。以下是一个详细的Python代码示例,展示了如何实现Dijkstra算法:
参考资源链接:[Python Dijkstra算法实现图最短路径详解](https://wenku.csdn.net/doc/6401abe6cce7214c316e9e98?spm=1055.2569.3001.10343)
首先,我们需要定义图的数据结构,通常可以使用邻接矩阵或邻接表来表示图。在这个例子中,我们使用邻接矩阵来表示图,其中矩阵中的每个元素表示对应边的权重。如果两个顶点之间没有直接的边,则权重设置为无穷大。
```python
import heapq
def dijkstra(graph, start):
# 初始化距离数组,所有顶点距离设为无穷大,起始顶点距离设为0
distances = [float('inf')] * len(graph)
distances[start] = 0
# 用于记录最短路径树的集合
visited = set()
while len(visited) < len(graph):
# 遍历所有顶点,找到未访问中距离最小的顶点
min_distance = float('inf')
min_index = -1
for v in range(len(graph)):
if v not in visited and distances[v] < min_distance:
min_distance = distances[v]
min_index = v
# 标记当前顶点为已访问
visited.add(min_index)
# 更新当前顶点所有邻接点的距离
for v in range(len(graph[min_index])):
if graph[min_index][v] > 0 and v not in visited:
distance = distances[min_index] + graph[min_index][v]
if distance < distances[v]:
distances[v] = distance
return distances
# 示例图的邻接矩阵表示
graph = [
[0, 6, 0, 1, 0],
[6, 0, 5, 2, 2],
[0, 5, 0, 0, 5],
[1, 2, 0, 0, 1],
[0, 2, 5, 1, 0],
]
# 起始顶点为0
start_vertex = 0
shortest_paths = dijkstra(graph, start_vertex)
print(
参考资源链接:[Python Dijkstra算法实现图最短路径详解](https://wenku.csdn.net/doc/6401abe6cce7214c316e9e98?spm=1055.2569.3001.10343)
阅读全文