Pagini recente » Cod sursa (job #9958) | Cod sursa (job #111133) | Cod sursa (job #2751751) | Cod sursa (job #129842) | Cod sursa (job #156093)
Cod sursa(job #156093)
program distante;
const
pinfinit=1.e20;
type pnod=^nod;
nod=record
nod:longint;
i:longint;
urm:pnod;
end;
var a:array[1..50000]of pnod;
d:array[1..50000]of real;
s:array[1..50000]of longint;
i,poz,r,n,m,j:longint;
p:pnod;
ok:boolean;
min:real;
f,g:text;
procedure citire;
var z,y,x:longint;
begin
read(f,n,m);
for i:=1 to n do begin d[i]:=pinfinit; end;
for i:=1 to m do begin
read(f,x,y,z); new(p);
p^.nod:=y; p^.i:=z; p^.urm:=a[x]; a[x]:=p;
end;
end;
begin {pp}
assign(f,'dijkstra.in'); reset(f); assign(g,'dijkstra.out'); rewrite(g);
citire;
r:=1;
s[r]:=1;
p:=a[r];
while p<>nil do
begin
d[p^.nod]:=p^.i; writeln('=',p^.i);
p:=p^.urm;
end;
d[r]:=0;
for i:=1 to n-1 do
begin
ok:=true;
min:=pinfinit;
poz:=0;
for j:=1 to n do if (min>d[j])and(s[j]=0)then begin
min:=d[j];
poz:=j;
end;
if poz=0 then break;
s[poz]:=1;
p:=a[poz];
while p<>nil do
begin
if s[p^.nod]=0 then if d[p^.nod]>d[poz]+p^.i then
begin
d[p^.nod]:=d[poz]+p^.i;
end;
p:=p^.urm;
end;
end;
ok:=true;
i:=1;
for i:=2 to n do if d[i]<>pinfinit then write(g,d[i]:0:0,' ')
else write(g,0,' ');
close(g); close(f);
end.