`import sys
def dijkstra(graph, start):
# 初始化距离字典,将所有顶点的距离设为无穷大,除了起点距离为0
distances = {vertex: float(‘infinity’) for vertex in graph}
distances[start] = 0
# 创建一个未访问顶点集合
unvisited = set(graph)
while unvisited:
# 从未访问过的顶点中选取距离最小的一个
current_vertex = min(unvisited, key=lambda vertex: distances[vertex])
# 遍历当前顶点的所有邻居
for neighbour, distance in graph[current_vertex].items():
# 计算从起点到邻居的距离
new_distance = distances[current_vertex] + distance
# 如果发现更短的路径,则更新邻居的距离
if new_distance < distances[neighbour]:
distances[neighbour] = new_distance
# 从未访问集合中移除当前顶点
unvisited.remove(current_vertex)
return distances
示例图,表示为邻接表
graph = {
‘A’: {‘B’: 1, ‘C’: 4},
‘B’: {‘A’: 1, ‘C’: 2, ‘D’: 5},
‘C’: {‘A’: 4, ‘B’: 2, ‘D’: 1},
‘D’: {‘B’: 5, ‘C’: 1}
}
print(dijkstra(graph, ‘A’))`