Spfa演算法模版

2021-06-04 02:10:42 字數 837 閱讀 2455

{}

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 可達的負權迴路。若不存在這樣的...