1
#include2
#include3
#include4
#include5
#include6
#define max 99999997
8usingnamespacestd; 9
//pair 的first 儲存的為最短距離, second儲存的為頂點編號 10
typedefpair<int,int>p;
//對組
1112
structnode 13
; 17node edge[
2003
];//
存所有的邊,因為是無向圖,所以*2 18
intcnt;
//結構體的下標 19
intn, s, t;
//n 點數,s 起點,t止點 20
inthead[
203];
//和鍊錶的頭指標陣列是一樣的。只不過此處head[u]記錄的為最後加入 edge 的且與u相連的邊在 edge 中的位置,即下標 21
22voidadd(intu,intv,intw)
//加邊操作 23
2930voiddijkstra() 31
54} 55
} 56
printf(
"%d\n"
,dis[t]==max?-
1:dis[t]);
//輸出結果 57
} 5859
intmain() 60
71scanf(
"%d %d"
,&s,&t);
//獲取起止點 72
dijkstra(); 73
} 74
return0;
75}題解在此
用到的資料結構
:前向星
對組優先佇列 1
//pair 的first 儲存的為最短距離, second儲存的為頂點編號 2
typedefpair<int,int>p;
//對組34
structnode
//前向星存邊 5
; 9node edge[
2003
];//
存所有的邊,因為是無向圖,所以*2 10
inthead[
203];
//和鍊錶的頭指標陣列是一樣的。只不過此處head[u]記錄的為最後加入 edge 的且與u相連的邊在 edge 中的位置,即下標 11
12priority_queuevector
,greater>que;
//優先佇列
從小到大
在此我們說一下前向星的加邊函式
1voidadd(intu,intv,intw)
//加邊操作 2
主函式對資料的獲取
1intmain() 2
13scanf(
"%d %d"
,&s,&t);
//獲取起止點 14
dijkstra(); 15
} 16
return0;
17}dijkstra演算法求值
1voiddijkstra() 2
25} 26
} 27
printf(
"%d\n"
,dis[t]==max?-
1:dis[t]);
//輸出結果 28
}
Dijkstra求單源最短路徑
思路 dijkstra求解帶權有向圖的單源最短路徑問題。與bellman ford演算法的區別是要求圖中沒有負的權值邊。在這種情況下dijkstra演算法通常有比較好的複雜度。特別是使用堆以後。演算法維護乙個點集s,該集合中的結點的最短路徑已經求出,演算法重複從結點集v s中選擇最短路徑估計最小的結...
Dijkstra求單源最短路徑
leetcode743 預定義 define mvnum 100 define imax 88888 無窮大 鄰接矩陣 typedef structmgraph 構造鄰接矩陣 int locatevex amgraph g,vertextype v return 1 int creategraph ...
Dijkstra演算法求單源最短路徑
與prim演算法樸素版實現起來差不多。樸素版dijkstra演算法 輸入乙個圖的矩陣,假定兩點不相鄰則權值為0 輸出每個頂點的最短路徑長度,可以列印指定頂點的路徑 dijkstra演算法跟prim演算法很像 相同的地方是 兩者都有乙個已經求得 mst 和已經求得 最短路 的集合 每納入乙個結點x到集...