迪克斯特拉 總權重最小路徑

2021-09-26 22:38:30 字數 1953 閱讀 6516

1.找出"最便宜"的節點,即可在最短時間內到達的節點

2.更新該節點的鄰居和開銷,檢查是否有前往他們的更短路勁,如果有,就更新其開銷

3.重複這個過程,直到對圖中的每個節點都這樣做

4.計算最短路徑

graph =

graph[

"start"]=

graph[

"start"][

"a"]=6

graph[

"start"][

"b"]=2

# print(graph["start"].keys())

# print(graph["start"]["a"])

graph[

"a"]

=graph[

"a"]

["fin"]=

1graph[

"b"]

=graph[

"b"]

["a"]=

3graph[

"b"]

["fin"]=

5graph[

"fin"]=

infinity =

float

("inf"

)costs =

costs[

"a"]=6

costs[

"b"]=2

costs[

"fin"

]= infinity

parents =

parents[

"a"]

="start"

parents[

"b"]

="start"

parents[

"fin"]=

none

processed =

deffind_lowest_cost_node

(costs)

: lowest_cost =

float

("inf"

) lowest_cost_node =

none

for node in costs:

# 遍歷所有的節點

cost = costs[node]

if cost < lowest_cost and node not

in processed:

# 如果當前節點的開銷更低且尚未處理過

lowest_cost = cost # 就將其視為開銷最低的節點

lowest_cost_node = node

return lowest_cost_node

node = find_lowest_cost_node(costs)

# 在未處理的節點中找出開銷最小的節點

while node is

notnone

:# 這個迴圈在所有節點都被處理過後結束

cost = costs[node]

neighbors = graph[node]

for n in neighbors.keys():

# 遍歷當前節點的所有鄰居

new_cost = cost + neighbors[n]

if costs[n]

> new_cost:

# 如果經當前節點前往該鄰居更近

costs[n]

= new_cost # 就更新該鄰居的開銷

parents[n]

= node # 同時將該鄰居的父節點設定為當前節點

# 將當前節點標記為處理過

node = find_lowest_cost_node(costs)

# 找出接下來要處理的節點,並迴圈

print

(graph)

print

(costs)

print

(parents)

python 迪克斯特拉(Dijkstra)

從起點到終點的路徑如上圖所示,每條路徑的長度都不相同 權重 如何從起點找到一條路徑,長度最短?建模 graph儲存了整張圖的結構 costs儲存了從起點開始,到每個點的最短距離 從起點到a是6,但是從 起點 b a 是5,所以後面a的路徑其實會變成5 parents記錄了每個地點的父節點,譬如開始時...

演算法 迪克斯特拉演算法Dijkstra

定義 找出最短路徑的演算法。思想 按路徑長度遞增次序產生演算法 把頂點集合v分成兩組 1 s 已求出的頂點的集合 初始時只含有源點v0 2 v s t 尚未確定的頂點集合 將t中頂點按遞增的次序加入到s中,保證 1 從源點v0到s中其他各頂點的長度都不大於從v0到t中任何頂點的最短路徑長度 2 每個...

YTU 3029 迪克斯特拉演算法

time limit 1 sec memory limit 128 mb submit 70 solved 43 submit status web board 對於如圖所示的乙個帶權有向圖,採用迪克斯特拉演算法求出從頂點0到其他各頂點的最短路徑及其長度。to 1 1 1 to 2 4 2 incl...