Cod sursa(job #154827)

Utilizator dobreDobre Catalin Andrei dobre Data 11 martie 2008 14:58:26
Problema Algoritmul lui Dijkstra Scor 80
Compilator fpc Status done
Runda Arhiva educationala Marime 1.23 kb
program dijkstra;
const fi='dijkstra.in';fo='dijkstra.out';
type pnod=^nod;
     nod=record
      x:word;
      cost:longint;
      urm:pnod;
     end;
var V:array[1..50001]of pnod;
    d:array[1..50001]of longint;
    c:array[1..2*50001]of word;
    f,g:text;
    n,m:longint;
    ii,jj,cost:longint;
    i,j:longint;

procedure add(i,j,cost:longint);
var p:pnod;
begin
p:=new(pnod);
P^.urm:=V[i];
P^.x:=j;
P^.cost:=cost;
V[i]:=P;
end;

procedure Ford;
var head,tail,ttail:longint;
    p:pnod;
    ii,cst:longint;
    CT:longint;
begin
head:=1;tail:=1;ttail:=1;
c[head]:=1;
repeat
tail:=ttail;
for i:=head to tail do begin
     p:=v[c[i]];
     while p<>nil do begin
            ii:=p^.x;
            cst:=p^.cost;
            CT:=d[c[i]]+cst;
            if(d[ii]=0)or(CT<d[ii])then begin
               d[ii]:=CT;
               ttail:=ttail+1;
               c[ttail]:=ii;
              end;
            p:=p^.urm;
           end;
    end;
head:=tail+1;
until tail=ttail;
end;

begin
assign(f,fi);reset(f);
assign(g,fo);rewrite(g);
readln(f,n,m);
for i:=1 to m do begin
     readln(f,ii,jj,cost);
     add(ii,jj,cost);
    end;
Ford;
for i:=2 to n do write(g,d[i],' ');
close(g);
close(f);
end.