Cod sursa(job #245465)

Utilizator AhilessIvanov Andrei Ahiless Data 18 ianuarie 2009 00:31:08
Problema Algoritmul lui Dijkstra Scor 10
Compilator fpc Status done
Runda Arhiva educationala Marime 1.6 kb
program dijksctra;
   type t1=array[1..10000, 1..3] of longint; t2=array[1..10000] of integer;
   t3=array[1..10000] of longint;
   var G:t1;  stare,sursa:t2; dist:t3;
   fin,i,j,nn,start,lung,finish,n,min,num,p,cer:longint;
   f,g1:text;
begin
  assign(f, 'dijkstra.in');
  assign(g1, 'dijkstra.out');
  reset(f);
  rewrite(g1);
  readln(f,nn, n);
  start:=1;
  for i:=1 to n do
          readln(f, G[i,1], G[i,2], G[i,3]);

  stare[start]:=1;
  sursa[start]:=1;


  for i:=1 to nn do dist[i]:=maxint;

  dist[start]:=0;

   for fin:=1 to nn do
      begin
        num:=start;
        min:=maxint;
        for i:=1 to nn do
           if stare[i]=1 then
               if dist[i]<=min then
                        begin
                         min:=dist[i];
                         num:=i;
                        end;
       for i:=1 to n do
        for j:=1 to 2 do
               if G[i,j]=num then
                        begin
                          if j=2 then p:=1 else p:=2;
                          if stare[G[i,p]]=2 then break;
                          if dist[G[i,p]]>dist[num]+G[i,3] then
                                  begin
                                     dist[G[i,p]]:=dist[num]+G[i,3];
                                      sursa[G[i,p]]:=G[i,j];
                                     stare[G[i,p]]:=1;
                                  end;
                        end;
          stare[num]:=2;
      end;
  for finish:=2 to nn do
     if dist[finish]<>maxint then write(g1, dist[finish], ' ') else
       write(g1, '0 ');
  close(g1); close(f);
end.