level 2
善良的qazpl
楼主
program spfafa;
var t,c,te,ts,i,j,k,m,n,a,b,z:longint;
q:array[1..3000] of longint;
dist:array[1..2000] of longint;
path:array[1..1000,1..1000] of longint;
function relax(u,v:longint):boolean;
begin
if (path[u,v]<>0)and(dist[u]+path[u,v]<dist[v]) then
begin
dist[v]:=dist[u]+path[u,v];
exit(true);
end else exit(false);
end;
procedure spfa(s:longint);
var h,t,v:longint; flag:array[1..1000] of boolean;
begin
fillchar(flag,sizeof(flag),false);
flag[s]:=true;
h:=0;t:=0;inc(t);
q[t]:=s;
while h<>t do
begin
h:=(h mod c)+1;
v:=q[h];
flag[v]:=false;
for i:=1 to c do
if relax(v,i) then
if not flag[i] then
begin
t:=(t mod c)+1;
q[t]:=i;
flag[i]:=true;
end;
end;
end;
begin
assign(input,*fj.in*);
assign(output,*fj.out*);
reset(input);
rewrite(output);
read(t,c,te,ts);
fillchar(dist,sizeof(dist) div 4,32767);
fillchar(q,sizeof(q),0);
fillchar(path,sizeof(path),0);
dist[te]:=0;
for i:=1 to c do
begin
read(a,b,z);
path[a,b]:=z;
path[b,a]:=z;
end;
spfa(te);
writeln(dist[ts]);
close(input);
close(output);
end.
2014年08月06日 09点08分
1
var t,c,te,ts,i,j,k,m,n,a,b,z:longint;
q:array[1..3000] of longint;
dist:array[1..2000] of longint;
path:array[1..1000,1..1000] of longint;
function relax(u,v:longint):boolean;
begin
if (path[u,v]<>0)and(dist[u]+path[u,v]<dist[v]) then
begin
dist[v]:=dist[u]+path[u,v];
exit(true);
end else exit(false);
end;
procedure spfa(s:longint);
var h,t,v:longint; flag:array[1..1000] of boolean;
begin
fillchar(flag,sizeof(flag),false);
flag[s]:=true;
h:=0;t:=0;inc(t);
q[t]:=s;
while h<>t do
begin
h:=(h mod c)+1;
v:=q[h];
flag[v]:=false;
for i:=1 to c do
if relax(v,i) then
if not flag[i] then
begin
t:=(t mod c)+1;
q[t]:=i;
flag[i]:=true;
end;
end;
end;
begin
assign(input,*fj.in*);
assign(output,*fj.out*);
reset(input);
rewrite(output);
read(t,c,te,ts);
fillchar(dist,sizeof(dist) div 4,32767);
fillchar(q,sizeof(q),0);
fillchar(path,sizeof(path),0);
dist[te]:=0;
for i:=1 to c do
begin
read(a,b,z);
path[a,b]:=z;
path[b,a]:=z;
end;
spfa(te);
writeln(dist[ts]);
close(input);
close(output);
end.