如果您嘗試在所有節點上迴圈,可以對初始值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...