Cod sursa(job #155915)

Utilizator ral33xstaic raluca ral33x Data 12 martie 2008 11:27:07
Problema Algoritmul lui Dijkstra Scor 10
Compilator fpc Status done
Runda Arhiva educationala Marime 1.19 kb
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,'dijkstra.in');reset(f);
      assign(g,'dijkstra.out');rewrite(g);
      readln(f,n,m);
      for i:=1 to n do
          for j:=1 to n do a[i,j]:=1001;
      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];
      for i:=1 to n do
          if i in c then d[i]:=a[x,i];
      for k:=1 to n-1 do begin
           min:=1001;
           for i:=1 to n do
               if (i in c)and (d[i]>0)and(d[i]<min)then begin
                     min:=d[i];
                     j:=i
               end;
           c:=c-[j];
           if j=x then break;
           for i:=1 to n do
               if i in c then
                  if a[j,i]<>1001 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]<>1001 then write(g,d[i],' ')
          else write(g,0)
end;
begin citire;
      marcare(1);
      close(g)
end.