dijkstra求最短路的基本思路是貪心演算法,求解單源最短路。
適用於求解正權邊。
演算法的基本原理可以自行檢視。
這裡講解兩種求最短路的方法:
(1)、樸素演算法
樸素演算法的時間複雜度為o(n2),適用於稠密圖,用鄰接矩陣來存圖,並且可以處理自環和重邊。
dijkstra求最短路 i
給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環,所有邊權均為正值。
請你求出1號點到n號點的最短距離,如果無法從1號點走到n號點,則輸出-1。
輸入格式
第一行包含整數n和m。
接下來m行每行包含三個整數x,y,z,表示存在一條從點x到點y的有向邊,邊長為z。
輸出格式
輸出乙個整數,表示1號點到n號點的最短距離。
如果路徑不存在,則輸出-1。
資料範圍
1≤n≤500 1≤n≤500,1≤m≤105 1≤m≤105,
圖中涉及邊長均不超過10000。
輸入樣例:
輸出樣例:3 3
1 2 2
2 3 1
1 3 4
3模板**:
#include#include#includeusing namespace std;const int n=510;
int n,m;
int q[n][n];
int d[n];
bool f[n];
int dj()
if(d[n]==0x3f3f3f3f) return -1;
return d[n];
}int main()
); while(!q.empty())
{pii t=q.top();
q.pop();
int ver=t.second,dis=t.first;for(int i=0;i這裡用pair來存1到id距離和id,優先佇列預設以pair first從小到大排序。
Dijkstra求最短路(樸素and堆優化)
題目來自acwing 題目描述 給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環,所有邊權均為正值。請你求出1號點到n號點的最短距離,如果無法從1號點走到n號點,則輸出 1。輸入格式 第一行包含整數n和m。接下來m行每行包含三個整數x,y,z,表示點x和點y之間存在一條有向邊,邊長為z。輸出格式...
Dijkstra演算法求最短路 樸素版
圖論中求最短路的演算法有很多,這裡使用一道模板題來介紹可以求單源最短路的dijkstra演算法 acwing 849.dijkstra求最短路 i 求乙個源點到 除了這個點之外其他所有的點 的最短距離,不需要記錄每條路徑 這題一直困惑著我的是,為什麼一開始找的最小的最短距離就是確定的最短距離?想了好...
Dijkstra求最短路 I(樸素演算法)
給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環,所有邊權均為正值。請你求出1號點到n號點的最短距離,如果無法從1號點走到n號點,則輸出 1。輸入格式 第一行包含整數n和m。接下來m行每行包含三個整數x,y,z,表示存在一條從點x到點y的有向邊,邊長為z。輸出格式 輸出乙個整數,表示1號點到n號...