完成实验4代码

This commit is contained in:
typingbugs 2024-06-08 16:30:14 +08:00
parent d1e8f8cc2a
commit 938778bfa9

38
Labs/Lab4/src/main.py Normal file
View File

@ -0,0 +1,38 @@
INF = float('inf')
def Dijkstra(G, origin):
node_num = len(G)
vis = [False] * node_num
dis = [G[origin][node] for node in range(node_num)]
paths = [[]] * node_num
paths[origin].append(origin)
vis[origin] = True
last_point = origin
for i in range(node_num - 1):
min_dis = INF
for j in range(node_num):
if not vis[j] and dis[j] < min_dis:
min_dis = dis[j]
last_point = j
vis[last_point] = True
if i == 0:
paths[last_point] = paths[origin] + [last_point]
for k in range(node_num):
if G[last_point][k] < INF and dis[k] > dis[last_point] + G[last_point][k]:
dis[k] = dis[last_point] + G[last_point][k]
paths[k] = paths[last_point] + [k]
return dis, paths
if __name__ == '__main__':
G = [[0, 1, 12, INF, INF, INF],
[INF, 0, 9, 3, INF, INF],
[INF, INF, 0, INF, 5, INF],
[INF, INF, 4, 0, 13, 15],
[INF, INF, INF, INF, 0, 4],
[INF, INF, INF, INF, INF, 0]]
origin = 0
dis, paths = Dijkstra(G, origin)
for i in range(len(G)):
print(f"{origin} to {i}", "path:", paths[i], f"distance: {dis[i]}")