最短路徑 迪傑斯特拉演算法與弗洛伊德演算法

2021-10-10 09:03:17 字數 2130 閱讀 2474

對網圖和非網圖,最短路徑含義的不同的。非網圖的最短路徑:兩頂點之間經過的邊數最少的路徑。網圖的最短路徑:兩頂點之間經過的邊上權值之和最少的路徑。解決了從某個源點到其餘各項點的最短路徑問題。時間複雜度為o[n2]。若想找到從源點到某乙個特定終點的最短路徑,這個問題和求源點到其他所有頂點的最短路徑一樣複雜。

若源點為v0,終點為v8,此演算法不是一下子就求出了v0到v8的最短路徑,而是一步步求出它們之間頂點的最短路徑,過程中都是基於已經求出的最短路徑的基礎上,求得更遠頂點的最短路徑,最終得到想要的結果。

對於此網圖:

程式結束之後,final = ,表示所有頂點均完成了最短路徑的查詢工作。

d = ,表示v0到各個頂點的最短路徑數

p = ,表示v0到各個頂點的最短路徑具體走法。如:p[8] = 7,表示v0到v8的最短路徑,頂點v8的前驅頂點是v7,再有p[7] = 6,表示v7的前驅是v6,又p[6] = 3,表示v6的前驅路徑是v3,以此類推。由此可得,從v0到v8的最短路徑為:v0–>v1–>v2–>v4–>v3–>v6–>v7–>v8

//最短路徑演算法:迪傑斯特拉演算法與弗洛伊德演算法

//迪傑斯特拉(dijkstra)演算法,求有向網g的v0頂點到其餘頂點v的最短路徑p[v]及帶權長度d[v]

typedef

int pathmatrix[maxvex]

;//用於儲存最短路徑下標的陣列

typedef

int shortpathtable[maxvex]

;//用於儲存各點最短路徑的權值和

//p[v]的值為前驅頂點下標,d[v]表示v0到v的最短路徑長度和

void

shortestpath_dijkstra

(mgraph g,

int v0, pathmatrix* p, shortpathtable* d)

(*d)

[v0]=0

; final[v0]=1

;for

(v =

1; v < g.numvertexes; v++)}

final[k]=1

;for

(w =

0; w < g.numvertexes; w++)}

}}

乙個二重迴圈初始化加乙個三重迴圈權值修正,就完成了所有頂點到所有頂點的最短路徑計算。時間複雜度:o[n3]

初始化d為鄰接矩陣,p如圖。

演算法執行完畢後,d矩陣每一行(如第0行)是以v0為起點,對應列為終點的最短路徑長。p表示其具體最短路徑。以v0到v7為例子,p[0][7] = 1,得到要經過頂點v1,取p[1][7] = 2,得到要過頂點v2,取p[2][7] = 4,得到要過頂點v4,取p[4][7] = 3,得到要經過點v3,以此類推。

//floyd演算法,求網圖g中各頂點v到其餘頂點w最短路徑p[v][w]及帶權長度d[v][w]

typedef

int pathmatrix[maxvex]

[maxvex]

;typedef

int shortpathtable[maxvex]

[maxvex]

;void

shortestpath_floyd

(mgraph g, pathmatrix* p, shortpathtable* d)

}for

(k =

0; k < g.numvertexes; k++)}}}}

最短路徑的顯示**:

//最短路徑的顯示**

for(v =

0; v < g.numvertexes; v++

)printf

(" -> %d\n"

, w);}

printf

("\n");

}

最短路徑 迪傑斯特拉演算法

例如,要求下圖v0到v8的最短路徑 所以我們可以找到這樣的一條最短路徑 下面是他的鄰接矩陣 偽 如下 define maxvex 9 define infinity 65535 typedef int patharc maxvex 用於儲存最短路徑下標的陣列 typedef int shortpat...

迪傑斯特拉最短路徑演算法

時間限制 1 sec 記憶體限制 32 mb 提交 27 解決 17 提交 狀態 命題人 外部匯入 題目描述 在帶權有向圖g中,給定乙個源點v,求從v到g中的其餘各頂點的最短路徑問題,叫做單源點的最短路徑問題。在常用的單源點最短路徑演算法中,迪傑斯特拉演算法是最為常用的一種,是一種按照路徑長度遞增的...

最短路徑(迪傑斯特拉演算法)

源 include define maxint 32767 表示極大值 define mvnum 100 最大頂點數 typedef char vertextype 定義資料型別 typedef int arctype typedef struct amgraph int locatevex amg...