演算法日記 Dijkstra最短路徑演算法

2022-08-01 20:03:11 字數 1259 閱讀 8095

狄克斯拉特演算法是在圖的基礎上增加了 加權圖的概念。就是節點和節點之間是有不同距離的

用dijkstra演算法找出以a為起點的單源最短路徑步驟如下

演算法實現

#

dijkstra演算法——通過邊實現鬆弛

#指定乙個點到其他各頂點的路徑——單源最短路徑

#初始化圖引數

g = ,

2:,3:,

4:,5:,

6:}#每次找到離源點最近的乙個頂點,然後以該頂點為重心進行擴充套件

#最終的到源點到其餘所有點的最短路徑

#一種貪婪演算法

def dijkstra(g,v0,inf=999):

"""使用 dijkstra 演算法計算指定點 v0 到圖 g 中任意點的最短路徑的距離

inf 為設定的無限遠距離值

此方法不能解決負權值邊的圖

"""book =set()

minv =v0

#源頂點到其餘各頂點的初始路程

dis = dict((k,inf) for k in

g.keys())

dis[v0] =0

while len(book)

book.add(minv)

#確定當期頂點的距離

for w in g[minv]: #

以當前點的中心向外擴散

if dis[minv] + g[minv][w] < dis[w]: #

如果從當前點擴充套件到某一點的距離小與已知最短距離

dis[w] = dis[minv] + g[minv][w] #

對已知距離進行更新

new = inf #

從剩下的未確定點中選擇最小距離點作為新的擴散點

for v in

dis.keys():

if v in book: continue

if dis[v]

new =dis[v]

minv =v

return

disdis = dijkstra(g,v0=1)

print dis.values()

最短路 Dijkstra演算法

dijksitra演算法求最短路僅僅適用於不存在右邊是負權的情況 bellman ford演算法沒有這乙個限制 主要特點是從起點為中心向外層層擴充套件,直到擴充套件到終點為止。即乙個最短路路徑中經過的所有點這條路均是其最短路。反證法易證 dijkstra基本思路 找到最短距離已經確定的頂點,從它出發...

dijkstra最短路演算法

dijkstra演算法 1.定義概覽 dijkstra 迪傑斯特拉 演算法是典型的單源最短路徑演算法,用於計算乙個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。dijkstra演算法是很有代表性的最短路徑演算法,在很多專業課程中都作為基本內容有詳細的...

最短路 Dijkstra演算法

這是一類求單源最短路的演算法,也就是求某乙個頂點到其他所有頂點的最短路。它是按照最短路徑遞增的順序來計算的。先說一下大體思路 將圖中的頂點分為兩個集合,s,v s。s儲存已經求出最短路徑的頂點,v s儲存未求出最短路的頂點。然後演算法就是不斷額的求出v s中頂點的最短路,然後把它加入s中,直到所有頂...