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

2022-07-11 06:39:10 字數 2228 閱讀 6035

2020-12-0611:43:13

問題描述:

編寫乙個程式,採用迪傑斯特拉演算法,輸出下圖所示的有向帶權圖

g中頂點

0到達其他各個頂點的最短路徑長度和最短路徑。

最大頂點個數

3#define inf 32767 //

用32767表示無窮大4//

typedef int infotype

5 typedef struct

6vertextype; //

頂點型別

10 typedef struct

11mgragh; //

圖的鄰接矩陣型別

16void dispmat(mgragh g) //

輸出鄰接矩陣g

1728}29

void ppath(int path, int i, int v0) //

輸出各條最短路徑

3038

void dispath(int dist, int path, int s, int n, int

v0)39

//由path計算最短路徑

4054

else

55 printf("

從%d到%d不存在路徑\n

", v0, i);56}

57void dijkstra(mgragh g, int

v0)58

//狄克斯特拉演算法求得從頂點v0到其餘各頂點的最短路徑

5972 s[v0] = 1; path[v0] = 0; //

源點編號v0放入s中

73for (i = 0; i < n; i++) //

迴圈直到所有頂點的最短路徑都求出

7483 s[u] = i; //

頂點u加入s中

84for (j = 0; j < n; j++) //

修改不在s中的頂點的距離

85if (s[j] == 0)86

if (g.edges[u][j] < inf && dist[u] + g.edges[u][j]

8791

}92 printf("

輸出最短路徑:\n");

93 dispath(dist, path, s, n, v0); //

輸出最短路徑94}

95void

main()96,

101 ,

102 ,

103 ,

104 ,

105 };

106 g.vexnum = 6

;107 g.arcnum = 9

;108

for (i = 0; i < g.vexnum; i++) //

建立如圖所示的鄰接矩陣

109for (j = 0; j < g.vexnum; j++)

110 g.edges[i][j] =a[i][j];

111 printf("\n"

);112 printf("

有向圖g的鄰接矩陣:\n");

113dispmat(g);

114dijkstra(g, u);

115 printf("\n"

);116 }

問題描述:編寫乙個程式,採用迪傑斯特拉演算法,輸出下圖所示的有向帶權圖

g中頂點

0到達其他各個頂點的最短路徑長度和最短路徑。

0

14

3

2

5

5

4

8

5

5

3

7

1

9

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

例如,要求下圖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...