題目測試:p4779 【模板】單源最短路徑(標準版)
寫在前面
如若用spfa判斷是否有負環
則相較於模版增加以下**:
int cnt[maxn]
;//+
intspfa
(int s)
return1;
//+}
//---------使用模版前言---------
//注意頂點數maxn的值 注意極大資料inf的值
#include
#include
#include
#include
#include
#include
#include
#define maxn 300010
//最大頂點數 注意依題修改大小
#define inf 0x3f3f3f3f
//極大資料 10^9數量級
using namespace std;
typedef pair<
int,
int> info;
//存放當前點及從源點到當前點的最短路徑的資訊
priority_queue
, greater
> q;
//優先佇列實現將已確定最短路徑的點放入佇列 小頂堆實現堆優化
struct edge
//弧的初始化};
vector g[maxn]
;//存放當前點出發的每一條弧的資訊
int n, m, s;
//點 弧 源點
int dis[maxn]
;//從源點到當前點的最短路徑(迪傑斯特拉跑完之前不一定是最終解)
int vis[maxn]
;//該陣列用於標記當前點是否已訪問過 起到優化作用
void
spfa
(int s)}}
}}intmain()
spfa
(s);
//演算法實施
for(
int i =
1; i < n; i++
)printf
("%d "
, dis[i]);
printf
("%d\n"
, dis[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。輸...