Cod sursa(job #898953)

Utilizator mada0222Tomus Madalina mada0222 Data 28 februarie 2013 12:18:54
Problema Algoritmul lui Dijkstra Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 1.3 kb
program asfsdf;
type c=record
nod,cost:longint;
end;
var f,g:text;
n,m,i,j,x,y,z,pi,ps,nr,wnod,wcost:longint;
a:array of array of c;
q,d:array[1..5000000] of longint;
bufin,bufout:array[1..65000] of byte;
begin
assign(f,'dijkstra.in'); reset(f);
assign(g,'dijkstra.out'); rewrite(g);
settextbuf(f,bufin);
settextbuf(g,bufout);
readln(f,n,m);
setlength(a,n+1,1);
  for i:=1 to m do
    begin
     readln(f,x,y,z);
     setlength(a[x],length(a[x])+1);
     a[x,0].nod:=a[x,0].nod+1;
     a[x,a[x,0].nod].cost:=z;
     a[x,a[x,0].nod].nod:=y;
    end;
    pi:=1; ps:=1;
    q[1]:=1;
       for i:=2 to n do
         d[i]:=maxint;
       while ps<=pi do
          begin
          nr:=q[ps];
          ps:=ps+1;
             for i:=1 to a[nr,0].nod do
               begin
                wnod:=a[nr,i].nod;
                wcost:=a[nr,i].cost;
                  if d[wnod]>d[nr]+a[nr,i].cost then
                    begin
                    d[wnod]:=d[nr]+a[nr,i].cost;
                    pi:=pi+1;
                    q[pi]:=wnod;
                    end;
               end;
          end;
          for i:=2 to n do
             begin
               if d[i]=maxint then
                  d[i]:=0;
                  write(g,d[i],' ');
             end;
close(f);
close(g);
end.