應用的是dijkstra演算法,這種演算法的思想類似於貪心。
首先,將所有點分為已知最短路和未知最短路兩類。開始時,只有出發點的最短路已知,為0,其餘點都標記為正無窮。我們要求出出發點到所有點的最短路徑,因此進行點數輪迴圈,每輪迴圈中,遍歷與已知點間有邊相連的點,更新與出發點的最短路徑。然後從所有更新的路徑值中選出最小值,將對應點加入已知最短路徑類,迴圈操作即可。
還有一點,就是選最小值時,要用堆進行優化,可以將時間複雜度將至o((n+m)log2n)級別,否則是o方複雜度,妥妥超時。
#include#include#define maxm 200010
#define maxn 100010
#define inf 2147483647
using
namespace
std;
inthead[maxn],cnt;
intdis[maxn];
intvis[maxn];
struct
edge edge[maxm];
void add(int x,int y,int
z) priority_queue
< pair,vector< pair >,greater< pair > >q;
intmain()
for(int i = 1; i <= n; i++)
dis[i] =inf;
dis[s] = 0
; q.push(make_pair(
0,s));
while(!q.empty()) }}
for(int i = 1; i <= n; i++)
printf(
"%d
",dis[i]);
return0;
}
P4779 模板 單源最短路徑(標準版)
最短路 堆優化 dijkstra 優先佇列 複雜度 o eloge 洛谷4779 題目描述 給定乙個 n 個點,m 條有向邊的帶非負權圖,請你計算從 s 出發,到每個點的距離。資料保證能從 s 出發到任意點 輸入4 6 1 1 2 2 2 3 2 2 4 1 1 3 5 3 4 3 1 4 4 輸出...
P4779 模板 單源最短路徑(標準版)
題目入口 p4779 模板 單源最短路徑 標準版 使用 堆優化dijkstra求最短路 模版 使用模版前言 注意頂點數maxn的值 注意極大資料inf的值 include include include include include include include define maxn 3000...
P4779 模板 單源最短路徑(標準版)
單源最短路徑模板題,沒什麼好說的。然而本題卡普通spfa.昨天某位同學給我說了堆優化spfa.於是就拿來寫這道題,a了 堆優化思想就是把dis小的放在前邊,也許和slf優化差不多?然而感覺上比slf快很多 include include include include includeusing na...