模拟链表SPFA...
今天上午刚AC掉自己的第一个模拟链表SPFA~是不是有点晚呢...发出来受BS一下...
program SPFA;
type l=record
x,y,q,n:integer;
end;
var
d:array[1..100000]of l;
e,dist:array[1..100000]of integer;
nn,m,i,j:integer;
v:array[1..100000]of boolean;
x,y,z,o:integer;
n,f,s:integer;
q:array[1..1000]of integer;
t,xx:integer;
procedure add(x,y,z:integer);
begin
inc(o);
d[o].x:=x;
d[o].y:=y;
d[o].q:=z;
d[o].n:=e[x];
e[x]:=o;
end;
begin
readln(n,m);
for i:=1 to m do
begin
readln(x,y,z);
add(x,y,z);
add(y,x,z);
end;
f:=1;
s:=1;
q[1]:=1;
for i:=1 to n do
dist[i]:=32767;
dist[1]:=0;
while f<=s do
begin
xx:=q[f];
v[xx]:=false;
t:=e[xx];
while t<>0 do
begin
if(d[t].q+dist[xx]<dist[d[t].y])then
begin
dist[d[t].y]:=d[t].q+dist[xx];
if not v[d[t].y] then
begin
v[d[t].y]:=true;
inc(s);
if s>n then s:=1;
q[s]:=d[t].y;
end;
end;
t:=d[t].n;
end;
inc(f);
if f>n then f:=1;
end;
for i:=1 to n do
writeln(dist[i]);
end.
浙公网安备 33010602011771号