Cod sursa(job #559942)

Utilizator boti12botiGal Botond boti12boti Data 18 martie 2011 11:01:50
Problema Algoritmul lui Dijkstra Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 1.01 kb
type mat=array[1..1000,1..1000] of integer;
     vek=array[1..10000] of integer;
     vak=array[1..10000] of boolean;
var f:text; x:mat; v:vek; jr:vak; i,j,n,m,c,a,b:integer;
procedure dijk(k:integer);
  var i,min,mi:integer;
  begin
    jr[k]:=true;
    for i:=1 to n do
      if (x[k,i]<>-1)and(not jr[i])and(x[k,i]+v[k]<v[i]) then
      begin v[i]:=v[k]+x[k,i]; end;
    min:=1111;
    for i:=1 to n do
      if (v[i]<min) and not jr[i] then begin min:=v[i]; mi:=i; end;
    if mi<>n then dijk(mi);
  end;
begin
  assign(f,'dijkstra.in');
  reset(f);
  readln(f,n,m);
  for i:=1 to m do begin
    readln(f,a,b,c);
    if c<>0 then begin x[a,b]:=c; x[b,a]:=c; end
    else x[a,b]:=1111;
  end;
  close(f);
  for i:=1 to n do
    for j:=1 to n do
      if x[i,j]=1111 then x[i,j]:=0
      else if x[i,j]=0 then x[i,j]:=-1;
  for i:=1 to n do jr[i]:=false;
  for i:=2 to n do v[i]:=1111;
  dijk(1);
  assign(f,'dijkstra.out');
  rewrite(f);
  for i:=2 to n do
   write(f,v[i],' ');
  close(f);
end.