遍歷所有點的最短路徑python 所有節點最短路徑

2021-10-13 01:21:06 字數 1060 閱讀 2894

如果您嘗試在所有節點上迴圈,可以對初始值current執行迴圈。這將需要對**進行最少的修改:nodes = ('a', 'b', 'c', 'd', 'e', 'f', 'g')

distances = ,

'a': ,

'd': ,

'g': ,

'c': ,

'e': ,

'f': }

for start in nodes:

current = start

currentdistance = 0

unvisited =

visited = {}

unvisited[current] = currentdistance

while true:

for neighbour, distance in distances[current].items():

if neighbour not in unvisited: continue

newdistance = currentdistance + distance

if unvisited[neighbour] is none or unvisited[neighbour] > newdistance:

unvisited[neighbour] = newdistance

visited[current] = currentdistance

del unvisited[current]

if not unvisited: break

candidates = [node for node in unvisited.items() if node[1]]

current, currentdistance = sorted(candidates, key = lambda x: x[1])[0]

print(' shortest distances from %s ' % start)

print(visited)

基本上,我對start進行了乙個迴圈,並將初始的current設定為start。我還在末尾新增了乙個列印輸出,告訴您顯示資訊的起始節點。在

c 遍歷所有點且距離最短 最短路徑之A 演算法

在求最短路徑問題是,如果去除負權邊的情況,可以使用dijkstra演算法來替代貝爾曼 福特演算法,複雜度更優。接下來介紹的a 演算法,也是一種相對更優的演算法。看下圖 使用dijkstra演算法來計算ab的最短路徑,基本上要把所有的點 邊都遍歷,才能得到最短路徑 綠線。但是站在人類的角度來看,藍線是...

獲取所有鑰匙的最短路徑

description 給定乙個二維網格 grid。代表乙個空房間,代表一堵牆,是起點,a b 代表鑰匙,a b 代表鎖。我們從起點開始出發,一次移動是指向四個基本方向之一行走乙個單位空間。我們不能在網格外面行走,也無法穿過一堵牆。如果途經乙個鑰匙,我們就把它撿起來。除非我們手裡有對應的鑰匙,否則無...

源點到所有頂點的最短路徑

源點到其餘各點的最短路徑 從源點出發 遍歷鄰接點 每次選擇最小的路徑 作為次長 include include include using namespace std define maxsize 256 struct basenode int tailindex int nweight basen...