資料結構 最短路徑之—迪傑斯特拉演算法
#define MAXVEX 9
#define INFINITY 65535
typedef int PathMatrix[MAXVEX] //用於儲存最短路徑下標的陣列
typedef int ShortPathTable[MAXVEX] //用於儲存到各點最短路徑的權值和 比如V0到V2的權值是4
void ShortestPath_DIJ(MGraph G, int V0, PathMatrix &P, ShortPathTable &D) //介面:輸入的是無向圖G,初始點VO,路徑矩陣P,以及路徑表格,
{
int final[MAXVEX]; //final[v] = 1 表示已經求得頂點V0到Vw的最短路徑。為1的話表明已經取得,為0的話表明還沒有取得。
//初始化資料 初始化資料用的是v0到其他各個結點的長度。
for(v=0; v<G.numVertexes; v++)
{
final[v] = 0; //全部頂點初始化為未找到的最短路徑,所以初始化都為0
(*D)[v] = G.arc[v0][v]; //將與v0點有聯絡的頂點加上權值(距離)。 在鄰接矩陣中,從V0到V8的最大頂點數開始遍歷。
(*p)[V] = 0; //初始化路徑陣列P為0;
}
(*D)[V0] = 0; //v0到v0的路徑為0
final[V0] = 1; //V0到V0不需要求路徑。
//開始主迴圈,每次求得V0到某個V頂點的最短路徑 這個迴圈分為兩部分,根prim演算法一樣,先求出第一部分,然後進行糾正更新。
for(v=1; v< G.numVertexes; v++) //從1開始的,從第一個頂點開始探討 接著從下個結點開始。
{
min = INFINITY;
//從D陣列中找到最小的值。
for(w=0; w<G.numVertexes; w++)
{
if(!final[w] && (*D)[w]<min)
{
k = w; //k儲存的是距離當前結點距離最近的結點
min = (*D)[w];
}
}
final[k] = 1;
//修正當前最短路徑以及距離 要求下一層的結點要小於上一個結點到其他結點的距離。
for (w=0; w<G.numVertexes; w++)
{
if(!final[w] && min+G.arc[k][w] < [*D][w]) //當前的min+其他的。
{
(*D)[w] = min + G.arc[k][w] //修正當前路徑長度; 利用前驅頂點和其他頂點的長度且和前面的長度累積比大小。
(*p)[w] = k; //存放前驅頂點。 前驅結點和這個結點相連線的權值之和為<(*D)[k]. 發現用到p沒什麼用!
}
}
}
}
詳情過程可以參考這個!
https://wenku.baidu.com/view/6dc5c62486c24028915f804d2b160b4e767f810f
相關文章
- 最短路徑—Dijkstra(迪傑斯特拉)演算法演算法
- 求最短路徑-----迪傑斯特拉演算法演算法
- 最短路-迪傑斯特拉(dijkstra)
- 路徑規劃演算法 - 求解最短路徑 - Dijkstra(迪傑斯特拉)演算法演算法
- 資料結構與演算法——迪傑斯特拉(Dijkstra)演算法資料結構演算法
- 資料結構學習筆記-迪傑斯特拉演算法資料結構筆記演算法
- C++迪傑斯特拉演算法求最短路徑的詳細解釋C++演算法
- 迪傑斯特拉與spfa
- dijkstra迪傑斯特拉演算法(鄰接表法)演算法
- Dijkstra迪傑斯特拉求最短路和最短路的條數和各個點權值的最大值
- 演算法與資料結構之-圖的最短路徑演算法資料結構
- 程式設計師必須會的基本演算法8-Dijkstra演算法(迪傑斯特拉演算法)程式設計師演算法
- 資料結構和演算法學習筆記九:最短路徑資料結構演算法筆記
- L3-008 天梯團體賽 喊山 (30分) (vector容器的迪傑斯特拉解法)
- 最短路徑演算法總結演算法
- 最短路徑之Floyd演算法演算法
- 最短路徑之Dijkstra演算法演算法
- 資料結構------最短路徑Dijkstra和最小生成樹Prim資料結構
- 《演算法圖解》總結第 7 章:狄克斯特拉演算法演算法圖解
- 演算法(四):圖解狄克斯特拉演算法演算法圖解
- 最短路徑演算法演算法
- 資料結構與演算法之線性結構資料結構演算法
- 8.14 (河南牛客萌新賽 線段樹 ,ST求區間最值,迪傑斯特拉建正反圖,bfs+二分,模擬)+狀態bfs搜素
- Djikstra最短路徑演算法演算法
- 最短路徑(Dijskra演算法)JS演算法
- 最短路徑(Floyd演算法)演算法
- 資料結構和演算法之-列表資料結構演算法
- 資料結構與演算法之美資料結構演算法
- 演算法與資料結構之集合演算法資料結構
- 資料結構與演算法之排序資料結構演算法排序
- 資料結構與演算法——克魯斯卡爾(Kruskal)演算法資料結構演算法
- python實現Dijkstra演算法之 最短路徑問題Python演算法
- [MATLAB]最短路徑Floyd演算法Matlab演算法
- 資料結構和演算法之——跳錶資料結構演算法
- python之資料結構與演算法分析Python資料結構演算法
- 資料結構與演算法之快速排序資料結構演算法排序
- SciTech-BigDataAIML-Algorithm-Heuristic啟發式- 帶weight(權重)Graph(圖,無向)的最優路線規劃 : Dijkstra迪傑斯特拉演算法"由節點路線無向Graph"得出"Routing Table(路由表)"AIGo演算法路由
- 資料結構與演算法-資料結構(棧)資料結構演算法
- 最短路徑問題 (dijkstra演算法)演算法