Cod sursa(job #903220)

Utilizator Dddarius95Darius-Florentin Neatu Dddarius95 Data 1 martie 2013 19:14:31
Problema Floyd-Warshall/Roy-Floyd Scor 10
Compilator fpc Status done
Runda Arhiva educationala Marime 1.7 kb
program saddasdasdasd;
const infinit=maxint;
type vect=array[1..100]of integer;
     mat=array[1..100,1..100]of integer;
var d,tata:mat;
    n,m,start,finish,i,j:integer;
    f,g:text;
procedure initializare;
var i,j,x,y,cost:integer;
begin
readln(f,n,m,start,finish);
for i:=1 to n  do
 for j:=1 to n do begin
                  if i<>j then d[i,j]:=infinit
                          else d[i,j]:=0;
                  tata[i,j]:=0;
                  end;
for i:=1 to m do begin
                    readln(f,x,y,cost);
                    d[x,y]:=cost; d[y,x]:=cost;
                    tata[i,j]:=i; tata[j,i]:=j;
                    end;

end;

procedure drumuri(d,tata:mat);
var i,j,k:integer;
begin
for k:=1 to n do
 for i:=1 to n do
  for j:=1 to n do
    if (d[i,k]<>infinit)and(d[k,j]<>infinit) then
     if d[i,j]>d[i,k]+d[k,j] then
                                 begin
                                 d[i,j]:=d[i,k]+d[k,j];
                                 tata[i,j]:=tata[k,j];
                                 end;
end;

procedure afisare_drum(x,y:integer);
var dr:vect; lg,i:integer;
begin
dr[1]:=y;lg:=1;
while dr[lg]<>x do
                  begin
                  inc(lg);
                  dr[lg]:=tata[y,x];
                  y:=tata[y,x];
                  end;
for i:=lg downto 1 do write(g,dr[i]:3);
writeln(g);
end;
begin
assign(f,'royfloyd.in');reset(f);
assign(g,'royfloyd.out');rewrite(g);
//initializare;
readln(f,n);
for i:=1 to n do
begin
for j:=1 to n do read(f,d[i,j]);
readln(f);
end;
drumuri(d,tata);
//afisare_drum(start,finish);
for i:=1 to n do
begin
for j:=1 to n do write(g,d[i,j],' ');
writeln(g);
end;
close(f);close(g);
end.