水题一道,没什么可解释的。注意是无向图。 program P1031; var t,c,ts,te,ans:longint; v:array [1..2510] of longint; d:array [1..2510,1..2510] of longint; b:array [1..2510] of boolean; procedure init; var i,x,y,dis,j:longint; begin ans:=0; fillchar(d,sizeof(d),100); fillchar(v,sizeof(v),100); fillchar(b,sizeof(b),false); readln(t,c,ts,te); for i:=1 to c do begin readln(x,y,dis); if dis<d[x,y] then begin d[x,y]:=dis; d[y,x]:=dis; end; end; v[ts]:=0; end; procedure dijkstra; var i,j,min,p:longint; begin for i:=1 to t do begin min:=maxlongint; for j:=1 to t do begin if (v[j]<min) and (not b[j]) then begin min:=v[j]; p:=j; end; end; b[p]:=true; for j:=1 to t do if (not b[j]) and (d[p,j]+v[p]<v[j]) then v[j]:=d[p,j]+v[p]; end; end; begin assign(input,'P1031.in'); reset(input); assign(output,'P1031.out'); rewrite(output); init; dijkstra; writeln(v[te]); close(input); close(output); end.