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...