Dijkstra算法
def Dijkstra(start):
'''
1、初始化起点start到其他点距离 distance={},并初始化已经计算过的 visited=set();
2、获取距离起点start最近的一个点 next,遍历next的邻居节点 neighbors;
3、if distance[neighbors[i]] < distance[next] + martix[next][neighbors[i]],则更新
4、重复计算,直到visited包含所有的节点
return distance, 包括起点到其他点的最短距离
'''
distance = {}
visited = set()
for i in range(V):
if i == start:
distance[i] = 0
visited.add(start)
else:
distance[i] = martix[start][i]
next_node = find_lowest_node(distance, visited)
while next_node:
for i in range(V):
distance[i] = min(distance[i], distance[next_node]+martix[next_node][i])
next_node = find_lowest_node(distance, visited)
return distance
def find_lowest_node(distance, visited):
next_node = None
next_weight = float('inf')
for node, weight in distance.items():
if node not in visited and weight < next_weight:
next_node, next_weight = node, weight
return next_node
if __name__ == '__main__':
V = map(int, input())
martix = [[float('inf') for _ in range(V)] for _ in range(V)]
for _ in range(V):
v, u, w = list(map(int, input().split()))
martix[v][u] = w
martix[u][v] = w
start = map(int, input())
distince = Dijkstra(start)