完成实验4代码
This commit is contained in:
parent
d1e8f8cc2a
commit
938778bfa9
38
Labs/Lab4/src/main.py
Normal file
38
Labs/Lab4/src/main.py
Normal 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]}")
|
Loading…
x
Reference in New Issue
Block a user