給定乙個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
輸出樣例:
1.先把dist陣列置為inf,dist[1]=0;g[n][n]為inf
2輸入的時候處理一下自環和重環,g[i][j]=min(g[i][j],w[i][j]).(如果自環是正值的話)
3.雙層迴圈迭代,每次找乙個沒有遍歷過的dist[i]最小的點,然後用該點取更新其他點
4.如果最後dist[n]=inf,就證明沒有邊到0點,所以放回-1,否則放回dist[n]
#include
#include
#include
using
namespace std;
const
int maxn =
505;
int g[maxn]
[maxn]
;int dist[maxn]
;int n, m;
bool sta[maxn]
;int
dijkstra()
for(
int j =
1; j <= n; j++
) sta[t]
=true;}
if(dist[n]
==0x3f3f3f3f
)return-1
;return dist[n];}
intmain()
cout <<
dijkstra()
;return0;
}
acwing 849 Dijkstra求最短路
目錄演算法求解 堆優化演算法 參考文章 題目傳送門 給定乙個 n 個點 m 條邊的有向圖,圖中可能存在重邊和自環,所有邊權均為正值。請你求出 1 號點到 n 號點的最短距離,如果無法從 1 號點走到n 號點,則輸出 1。輸入格式 第一行包含整數 n 和 m。接下來 m 行每行包含三個整數 x,y,z...
Dijkstra求最短路
題目鏈結 給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環,所有邊權均為正值。請你求出1號點到n號點的最短距離,如果無法從1號點走到n號點,則輸出 1。輸入格式 第一行包含整數n和m。接下來m行每行包含三個整數x,y,z,表示存在一條從點x到點y的有向邊,邊長為z。輸出格式 輸出乙個整數,表示1...
Dijkstra求最短路
題目鏈結 給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環,所有邊權均為非負值。請你求出1號點到n號點的最短距離,如果無法從1號點走到n號點,則輸出 1。輸入格式 第一行包含整數n和m。接下來m行每行包含三個整數x,y,z,表示存在一條從點x到點y的有向邊,邊長為z。輸出格式 輸出乙個整數,表示...