給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環,所有邊權均為正值。
請你求出1號點到n號點的最短距離,如果無法從1號點走到n號點,則輸出-1。
輸入格式
第一行包含整數n和m。
接下來m行每行包含三個整數x,y,z,表示存在一條從點x到點y的有向邊,邊長為z。
輸出格式
輸出乙個整數,表示1號點到n號點的最短距離。
如果路徑不存在,則輸出-1。
資料範圍
1≤n≤500,
1≤m≤105,
圖中涉及邊長均不超過10000。
輸入樣例:
3 31 2 2
2 3 1
1 3 4
輸出樣例:
3本題資料範圍:1≤n≤500,1≤m≤10^5 m > n^2 稠密圖,因此用鄰接矩陣更為合適
#include using namespace std;
typedef long long ll;
typedef pairpii;
const int mod = 998244353;
const int n = 1e3;
int dx = , dy = ;
int n, m;
// 1≤n≤500,1≤m≤10^5 m>n^2 稠密圖用鄰接矩陣
int g[n][n];//儲存邊的資訊.
int d[n]; //儲存各點到1號的的最小距離
int st[n]; //將已經確定最短距離的點存入
void dijkstra()
}st[t] = 1; //將t存入st陣列中
首先將d[1]賦值為0,內迴圈確定乙個最短點1號,之後用t=1,更新與其相鄰的兩個點的距離,d[2]=2,d[3]=4.第二次迴圈,確定2號為最短點,存入st中,之後用t=2,更新3號節點,c此時d[3]由4變為3,結束。
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 求乙個源點到 除了這個點之外其他所有的點 的最短距離,不需要記錄每條路徑 這題一直困惑著我的是,為什麼一開始找的最小的最短距離就是確定的最短距離?想了好...
849 Dijkstra求最短路 I
給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環,所有邊權均為正值。請你求出1號點到n號點的最短距離,如果無法從1號點走到n號點,則輸出 1。輸入格式 第一行包含整數n和m。接下來m行每行包含三個整數x,y,z,表示存在一條從點x到點y的有向邊,邊長為z。輸出格式 輸出乙個整數,表示1號點到n號...