以下是一个简单的迪杰斯特拉算法的实现,假设图是通过邻接矩阵表示:
import sys
def dijkstra(graph, start):
# 初始化距离数组
dist = [sys.maxsize] * len(graph)
dist[start] = 0
# 创建集合S,用于存储已经确定最短路径的顶点
S = set()
while len(S) < len(graph):
# 从距离数组中选择最小值的顶点
min_dist = sys.maxsize
min_index = -1
for i in range(len(graph)):
if i not in S and dist[i] < min_dist:
min_dist = dist[i]
min_index = i
# 将该顶点添加到集合S中
S.add(min_index)
# 更新与该顶点相邻的顶点的最短距离
for i in range(len(graph)):
if i not in S and graph[min_index][i] != 0:
new_dist = dist[min_index] + graph[min_index][i]
if new_dist < dist[i]:
dist[i] = new_dist
return dist
使用示例:
# 定义邻接矩阵表示的图
graph = [
[0, 4, 0, 0, 0, 0, 0, 8, 0],
[4, 0, 8, 0, 0, 0, 0, 11, 0],
[0, 8, 0, 7, 0, 4, 0, 0, 2],
[0, 0, 7, 0, 9, 14, 0, 0, 0],
[0, 0, 0, 9, 0, 10, 0, 0, 0],
[0, 0, 4, 14, 10, 0, 2, 0, 0],
[0, 0, 0, 0, 0, 2, 0, 1, 6],
[8, 11, 0, 0, 0, 0, 1, 0, 7],
[0, 0, 2, 0, 0, 0, 6, 7, 0]
]
start = 0
dist = dijkstra(graph, start)
print(dist)
输出结果为:[0, 4, 12, 19, 21, 11, 9, 8, 14],表示从起始顶点到其他所有顶点的最短距离。
制作不易,请点赞加关注