Cod sursa(job #380979)

Utilizator cristinabCristina Brinza cristinab Data 8 ianuarie 2010 14:49:26
Problema Algoritmul lui Dijkstra Scor 10
Compilator fpc Status done
Runda Arhiva educationala Marime 0.98 kb
{bellman ford}
const inf=maxlongint div 2;

type muchie=record
            x,y,c:longint;
            end;

var u:array[1..250002] of muchie;
    d:array[1..50001] of longint;
    n,m:longint;

procedure citire;
var i:longint;
begin
assign(input,'dijkstra.in'); reset(input);
readln(n,m);
for i:=1 to m do
    begin
    readln(u[i].x,u[i].y,u[i].c);
    if u[i].x=1 then d[u[i].y]:=u[i].c;
    end;
close(input);
end;

procedure bellman;
var i:longint;
    ok:boolean;
begin

for i:=1 to n do d[i]:=inf;

d[1]:=0;

ok:=true;

repeat
  ok:=true;
  for i:=1 to m do
      if d[u[i].y]>d[u[i].x]+u[i].c then
         begin
         d[u[i].y]:=d[u[i].x]+u[i].c;
         ok:=false;
         end;
until ok;

end;

procedure afisare;
var i:longint;
begin
assign(output,'dijkstra.out'); rewrite(output);
for i:=2 to n do
    if d[i]=0 then write(0,' ')
              else write(d[i],' ');
close(output);
end;

begin
citire;
bellman;
afisare;
end.