05 演算法之狄克斯特拉 python實現

2021-09-25 11:00:40 字數 1550 閱讀 2158

狄克斯特拉演算法,找出圖中權重最小的路徑

#!python

#coding=utf-8

"""狄克特斯拉演算法

有以下圖:

start --6-->a

start --2-->b

a --1-->end

b --5-->end

b --3-->a

使用迪克斯特拉演算法找出start-->end

權重最小的路徑

"""def

build_graph()

: graph =

graph[

"start"]=

graph[

"a"]

= graph[

"b"]

= graph[

"end"]=

return graph

defdijkstra()

: graph = build_graph(

)# 無窮大

infinity =

float

("inf"

) costs =

parents =

# 已處理過的節點

processed =

# 找出開銷最低的節點名稱

node = find_lowest_cost(costs, processed)

while node is

notnone

: cost = costs[node]

# 找出鄰居節點

neighbors = graph[node]

for key in neighbors.keys():

new_cost = cost + neighbors[key]

if costs[key]

> new_cost:

costs[key]

= new_cost

parents[key]

= node

node = find_lowest_cost(costs, processed)

print

(costs)

print

(parents)

"""找到權重最低的節點

"""def

find_lowest_cost

(costs, processed)

:# 最小權重,初始化設定成無窮大

lowest_cost =

float

("inf"

) lowest_node =

none

for node in costs:

cost = costs[node]

if cost < lowest_cost and node not

in processed:

lowest_cost = cost

lowest_node = node

return lowest_node

dijkstra(

)

狄克斯特拉演算法

廣度優先演算法,它找出的是段數最少的路徑 無向圖 如果我們要找出最快的路徑 加權圖 可以使用狄克斯特拉演算法。狄克斯特拉演算法包含四個步驟 1.找出 最便宜 的節點,即可在最短時間內到達的節點 2.更新該節點的鄰居的開銷 3.重複這個過程,直到對圖中的每個節點都這樣做了 4.計算最終路徑 以下圖為例...

狄克斯特拉演算法

是由荷蘭計算機科學家狄克斯特拉於1959 年提出的。是從乙個頂點到其餘各頂點的最短路徑演算法,解決的是有向無環圖中最短路徑問題,且不能有負權邊。狄克斯特拉演算法主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。示例 找出從起點到終點的最短路徑 當前起點到各點的花費,選擇最小且沒有被檢...

(原創)狄克斯特拉演算法

1.廣度優先搜尋用於計算非加權圖中的最短路徑 2.狄克斯特拉演算法用於計算加權圖中的最短路徑 不能帶有負權邊 備註 當圖的每條邊都帶有乙個數字時,這些數字成為權重。帶權重的圖稱為加權圖,反之稱為非加權圖。1.從起點開始。2.找到該點最便宜的鄰居節點。3.若該節點的開銷優於之前記錄的開銷,則更新該節點...