Cod sursa(job #632031)

Utilizator mada0222Tomus Madalina mada0222 Data 10 noiembrie 2011 09:19:34
Problema Algoritmul lui Dijkstra Scor 40
Compilator fpc Status done
Runda Arhiva educationala Marime 1.75 kb
program graff;
type mada=record
   a,b,c:integer;
   end;
var f,g:text;
    n,m,i,j,min,poz:longint;
    a1:array of array of integer;
    v:array of mada;
    s,d:array of integer;

begin
assign(f,'dijkstra.in'); reset(f);
assign(g,'dijkstra.out'); rewrite(g);
   readln(f,n,m);
   setlength(a1,n+1);
   for i:=1 to n do
     setlength(a1[i],n+1);
   for i:=1 to n do
     for j:=1 to n do
     begin
        a1[i,j]:=maxint;
        a1[i,i]:=0;
     end;
     setlength(v,m+1);
      for i:=1 to m do
      begin
        readln(f,v[i].a,v[i].b,v[i].c);
        a1[v[i].a,v[i].b]:=v[i].c;
      end;
   {   for i:=1 to n do
      begin
         for j:=1 to n do
            begin
            write(g,a1[i,j],' ');
            end;
         writeln(g);
      end;   }
      setlength(d,n+1);
      setlength(s,n+1);
      s[1]:=1;
        for i:=1 to n do
           begin
           d[i]:=a1[1,i];

           end;
        for i:=1 to n-1 do
           begin
           min:=maxint;
              for j:=1 to n do
                 if s[j]=0 then
                    if d[j]<min then
                      begin
                        min:=d[j];
                        poz:=j;
                      end;
        s[poz]:=1;
          for j:=1 to n do
            if s[j]=0 then
            if d[j]>d[poz]+a1[poz,j] then
              begin
              d[j]:=d[poz]+a1[poz,j];
              end;
         end;
        for i:=2 to n do
         if d[i]=maxint then
         write(g,0,' ')
         else
          write(g,d[i],' ');
      {   for i:=1 to n do
           if i<>1 then
             if t[i]<>0 then
                begin
                drum(i);
                end;     }
close(f);
close(g);
end.