Cod sursa(job #155881)
type matr=array[1..100,1..100]of integer;
sir=array[1..100]of integer;
var a:matr;d:sir;
f,g:text;
n,m,i,j,x,y,c:integer;
procedure citire;
begin assign(f,'drum.in');reset(f);
assign(g,'drum.out');rewrite(g);
readln(f,n,m);
for i:=1 to n do
for j:=1 to n do a[i,j]:=maxint;{initial costuri infinite}
for i:=1 to m do begin
readln(f,x,y,c);
a[x,y]:=c
end;
end;
procedure marcare(x:byte);
var c:set of byte;
min,k:integer;
begin
c:=[1..n]-[x];{x vizitat}
for i:=1 to n do
if i in c then d[i]:=a[x,i];{costul de la x la vf}
for k:=1 to n-1 do begin
min:=maxint;
for i:=1 to n do
if (i in c)and (d[i]>0)and(d[i]<min)then begin
min:=d[i]; {costul minim}
j:=i
end;
c:=c-[j];{sterg nodu vizitat}
if j=x then break;
for i:=1 to n do
if i in c then
if a[j,i]<>maxint then
if (d[i]> d[j]+a[j,i])then d[i]:=d[j]+a[j,i];
end;
for i:=2 to n do
if d[i]<>maxint then write(g,d[i],' ')
else write(g,'nu exista')
end;
begin citire;
marcare(1);
close(g)
end.