{}
const maxn=5000;
type
link=^node;
node=record x,dis:longint; next:link; end;
var g:array[1..maxn] of link;
dist,q:array[1..maxn] of longint;
v:array[1..maxn] of boolean;
n:longint;
procedure spfa(s:longint);
var top,i,nowi:longint;
p:link;
begin
for i:=1 to n do begin dist[i]:=maxlongint; v[i]:=false; end; dist[s]:=0; v[s]:=true;
top:=1; q[1]:=s;
while top>0 do begin
nowi:=q[top]; v[nowi]:=false; dec(top);
p:=g[nowi];
while p<>nil do begin
if dist[nowi]+p^.disdist[p^.x]:=dist[nowi]+p^.dis;
if not v[p^.x] then begin
inc(top);
q[top]:=p^.x;
v[p^.x]:=true;
end;
end;
p:=p^.next;
end;
end;
end;
模版 SPFA求最短路
題目測試 p4779 模板 單源最短路徑 標準版 寫在前面 如若用spfa判斷是否有負環 則相較於模版增加以下 int cnt maxn intspfa int s return1 使用模版前言 注意頂點數maxn的值 注意極大資料inf的值 include include include incl...
最快最好用的 spfa演算法模版 鄰接矩陣 1
1 演算法判環並輸出最短路徑,邊從0開始,點都可以 struct edge vectoredges vectorg 1005 儲存from對應的邊的標號 bool inq 1005 是否在佇列中 int d 1005 源點到各個點的最短路 int pre 1005 最短路的上一條弧 int cnt ...
Bellman Ford演算法,SPFA演算法
bellman ford 演算法能在更普遍的情況下 存在負權邊 解決單源點最短路徑問題。對於給定的帶權 有向或無向 圖g v,e 其源點為 s,加權函式w是 邊集e 的對映。對圖g執行 bellman ford 演算法的結果是乙個布林值,表明圖中是否存在著乙個從源點s 可達的負權迴路。若不存在這樣的...