最短路徑問題(Dijkstra演算法)學習心得

2021-09-08 02:39:58 字數 1440 閱讀 8907

在離散數學的學習過程中,遇到了最短路徑問題。dijkstra演算法求解單源最短路徑本身不易理解,本文綜合自己的理解試圖給出dijkstra演算法形式化描述以及示例。

最短路徑問題:給定帶權圖g=及節點u和v,其中每一條邊e的權重w(e)為非負數,求從u到v的最短路徑。

最短路徑性質:如果

演算法步驟:

a.初始時,s只包含源點,即s=,v的距離為0。u包含除v外的其他頂點,即:u=,若v與u中頂點u有邊,則正常有權值,若u不是v的出邊鄰接點,則權值為∞。

b.從u中選取乙個距離v最小的頂點k,把k,加入s中(該選定的距離就是v到k的最短路徑長度)。

c.以k為新考慮的中間點,修改u中各頂點的距離;若從源點v到頂點u的距離(經過頂點k)比原來距離(不經過頂點k)短,則修改頂點u的距離值,修改後的距離值的頂點k的距離加上邊上的權。

d.重複步驟b和c直到所有頂點都包含在s中

帶權圖g如圖1-1所示,求從

圖1-1                              

使用dist陣列表示各頂點到v1頂點的路徑長度,則初始時dist=[0, 3, 7, 5,

使用s表示已選節點,t表示未選節點,則初始時s=,t=

第一步,在t集合中挑選出與源點距離最短的頂點v2,並修改dist中以v2為中間點後各頂點的最短距離。則

s= t= 

dist=[0,3,5,5,9,

第二步,在t中挑選出與源點距離最短的頂點v3,並修改dist中以v3為中間點後各頂點的最短距離。則

s= t=

dist = [0, 3, 5, 5, 8,

第三步,在t中挑選出與源點距離最短的頂點v4, 並修改dist中以v4為中間點後各頂點的最短距離。則

s=, t=

dist = [0, 3, 5, 5, 8, 7, 13]

第四步,在t中挑選與源點距離最短的頂點v5, 並修改dist中以v5為中間點後各頂點的最短距離。則

s=, t=

dist=[0, 3, 5, 5, 8, 7, 10]

第五步,在t中挑選出與源點距離最短的頂點v6, 並修改dist中以v6為中間點後各頂點的最短距離。則

s= , t=

dist=[0, 3, 5, 5, 8, 7, 9]

第六步,在t中挑選出與源點距離最短的頂點v7, 並修改dist中以v7為中間點後各頂點的最短距離。則

s= , t= {}

dist=[0, 3, 5, 5, 8, 7, 9]

此時,由於t集合為空,整個演算法到此結束。

最短路徑問題(Dijkstra)

一 基本概念 從起點出發找一條到達目的地的 邊權和最小的路徑,這就是單元最短路問題。在最短路問題中,給出的是乙個有向加權圖g v,e 邊的權值是某種物理物件的度量標準,不一定是距離,它可以是時間,金錢,罰款,損失或任何其他路徑線性積累的數量形式。路徑p v0,v1,vk 的權是指其組成邊的所有權值之...

最短路徑問題 dijkstra

description 平面上有n個點 n 100 每個點的座標均在 10000 10000之間。其中的一些點之間有連線。若有連線,則表示可從乙個點到達另乙個點,即兩點間有通路,通路的距離為兩點直線的距離。現在的任務是找出從一點到另一點之間的最短路徑。input 輸入檔案short.in,共有n m...

最短路徑問題(Dijkstra)

給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。input 輸入n,m,點的編號是1 n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,且其長度為d,花費為p。最後一行是兩個數 s,...