Dijkstra演算法和Floyd演算法

2022-09-17 04:27:08 字數 1331 閱讀 7335

dijkstra演算法

1.定義概覽

dijkstra(迪傑斯特拉)演算法是典型的單源最短路徑演算法,用於計算乙個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。dijkstra演算法是很有代表性的最短路徑演算法,在很多專業課程中都作為基本內容有詳細的介紹,如資料結構,圖論,運籌學等等。注意該演算法要求圖中不存在負權邊。

問題描述:在無向圖 g=(v,e) 中,假設每條邊 e[i] 的長度為 w[i],找到由頂點 v0 到其餘各點的最短路徑。(單源最短路徑)

2.演算法描述

1)演算法思想:設g=(v,e)是乙個帶權有向圖,把圖中頂點集合v分成兩組,第一組為已求出最短路徑的頂點集合(用s表示,初始時s中只有乙個源點,以後每求得一條最短路徑 , 就將加入到集合s中,直到全部頂點都加入到s中,演算法就結束了),第二組為其餘未確定最短路徑的頂點集合(用u表示),按最短路徑長度的遞增次序依次把第二組的頂點加入s中。在加入的過程中,總保持從源點v到s中各頂點的最短路徑長度不大於從源點v到u中任何頂點的最短路徑長度。此外,每個頂點對應乙個距離,s中的頂點的距離就是從v到此頂點的最短路徑長度,u中的頂點的距離,是從v到此頂點只包括s中的頂點為中間頂點的當前最短路徑長度。

2)演算法步驟:

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中。

執行動畫過程如下圖

3.演算法**實現:

const int  maxint = 32767;

const int maxnum = 10;

int dist[maxnum];

int prev[maxnum];

int a[maxunm][maxnum];

void dijkstra(int v0)

dist[v0] = 0;

s[v0] = true;   

for(int i=2; i<=n; i++)

mgraph;

void floyd(mgraph g)} }

演算法時間複雜度:o(n3)

Dijkstra演算法和Floyd演算法

最近做課設的時候用到了這兩個演算法,於是總結在這裡。dijkstra是求解乙個頂點到其他頂點的最短距離,演算法最簡單的實現方法是用乙個鍊錶或者陣列來儲存所有頂點的集合 q,所以搜尋 q 中最小元素的運算 extract min q 只需要線性搜尋 q 中的所有元素。這樣的話演算法的執行時間是 o n...

Dijkstra演算法和A D 演算法

目前ros中可以使用的global planner主要包括 dijkstra,a 和d 演算法。local planner主要有 dwa trajectory teb和eband等。目前 teb local planner效果可能會好點。一 dijkstra演算法 dijkstra演算法也即 單源最...

dijkstra演算法和spfa演算法

void dijkstra s u 1 將這個點標記 證明以後可以使用這個點作為中間點了 for int j 1 j n j spfa模板 struct edge edge maxm 結構體表示靜態鄰接表 void addedge int from,int to,int dis 鄰接表建圖 void...