迪杰斯特拉(Dijkstra)算法(Python) import numpy as np def Input_Fun(): n = int(input().strip()) weight = [] for i in range(n): temp = input().split(' ') for j in temp: weight.append(int(j)) weights = np.array(weight).reshape(n, n) print(n) print(weights) return n, weights def Result_Output(prev, i): if prev[i] != 0: Result_Output(prev, prev[i]) print('->{}'.format(prev[i]+1), end='') def Dijkstra(): n, weights = Input_Fun() flag = np.zeros(n, bool) # 设置标志,确认是否加入集合 dist = weights[0] # 记录第0点到各个位置的距离 prev = np.zeros(n, int) # 记录节点的前一个位置 for i in range(n - 1): # 进行n-1次迭代,每次加入一个点 temp = float('inf') u = 0 for j in range(n): if not flag[j] and dist[j] < temp and dist[j] != 0: # 该点不在集合内、距离小、有连接 u = j temp = dist[j] flag[u] = True for j in range(n): if not flag[j] and weights[u][j] != 0: if dist[u] + weights[u][j] < dist[j] or dist[j] == 0: dist[j] = dist[u] + weights[u][j] prev[j] = u for i in range(n - 1): print(dist[i + 1], ':1', end='') Result_Output(prev, i+1) print("->{}".format(i + 2)) if __name__ == '__main__': Dijkstra()