Cod sursa(job #155881)

Utilizator ral33xstaic raluca ral33x Data 12 martie 2008 11:11:44
Problema Algoritmul lui Dijkstra Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 1.29 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,'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.