給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環, 邊權可能為負數。
請你求出1號點到n號點的最短距離,如果無法從1號點走到n號點,則輸出impossible。
資料保證不存在負權迴路。
輸入格式
第一行包含整數n和m。
接下來m行每行包含三個整數x,y,z,表示存在一條從點x到點y的有向邊,邊長為z。
輸出格式
輸出乙個整數,表示1號點到n號點的最短距離。
如果路徑不存在,則輸出」impossible」。
資料範圍
1≤n,m≤105
,圖中涉及邊長絕對值均不超過10000。
輸入樣例:
3 31 2 5
2 3 -3
1 3 4
輸出樣例:
2給定一張圖,對於圖中的x,y,z,有d[y]<=d[x]+z成立那麼就稱為這條邊滿足三角形不等式,如果所有的邊都滿足三角形不等式,那麼d陣列就是所求的最短路徑。演算法流程:
1:首先建立乙個佇列,最初佇列中只含有起點1;
2:取出對頭元素x,掃瞄他的所有出邊,(x,y,z),如果d[y]>d[x]+z,則使用d[x]+z更新d[y],同時y不在佇列中,則把y入隊
3:重複上述步驟,知道隊列為空
#include
using
namespace std;
const
int n=
100010
;int head[n]
,ver[n]
,next1[n]
,d[n]
,edge[n]
;int n,m,tot;
queue<
int> q;
bool v[n]
;void
add(
int x,
int y,
int z)
intspaf()
}}return d[n];}
intmain()
int t=
spaf()
;if(t==
0x3f3f3f3f
) cout<<
"impossible"
;else
printf
("%d"
,d[n]);
return0;
}
spfa求最短路
給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環,邊權可能為負數。請你求出1號點到n號點的最短距離,如果無法從1號點走到n號點,則輸出impossible。資料保證不存在負權迴路。輸入格式 第一行包含整數n和m。接下來m行每行包含三個整數x,y,z,表示點x和點y之間存在一條有向邊,邊長為z。輸...
spfa求最短路
題目鏈結 給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環,邊權可能為負數。請你求出1號點到n號點的最短距離,如果無法從1號點走到n號點,則輸出impossible。資料保證不存在負權迴路。輸入格式 第一行包含整數n和m。接下來m行每行包含三個整數x,y,z,表示存在一條從點x到點y的有向邊,邊...
spfa求最短路
給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環,邊權可能為負數。請你求出1號點到n號點的最短距離,如果無法從1號點走到n號點,則輸出impossible。資料保證不存在負權迴路。輸入格式 第一行包含整數n和m。接下來m行每行包含三個整數x,y,z,表示存在一條從點x到點y的有向邊,邊長為z。輸...