Cod sursa(job #82303)

Utilizator dumitru_andradadumitru guadalupe dumitru_andrada Data 6 septembrie 2007 14:14:04
Problema Rj Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.64 kb
type matrice= array[0..101,0..101] of integer;
const dx : array[1..8]of integer = (-1,-1,-1,0,0,1,1,1);
      dy : array[1..8]of integer =(-1,0,1,-1,1,-1,0,1);
var a,b :matrice;
    ma : array[1..100,1..100] of char;
    c : char;
    s : string;
    f,g : text;
    n,i,j,m,k,xx,yy,x,y,ij,jj,ri,rj,ii,min : integer;
    ok : boolean;

procedure citire(var a : matrice;var n,m,ij,jj,ri,rj : integer);
var i,j,k : integer;
begin
assign(f,'rj.in'); reset(f);
assign(g,'rj.out'); rewrite(g);
read(f,n,m);read(f,c); read(f,c);
for i:=1 to n do begin
readln(f,s);
if length(s)<>m then for k:=1 to m-length(s)+1 do s:=s+' ';

{        for j:=1 to m do
        begin
        ma[i,j]:=s[j];
        end;
end;
for i:=1 to n do begin  }
        for j:=1 to m do begin
        case s[j] of
        ' ' : a[i,j]:=0;
        'X' : a[i,j]:=-1;
        'x' : a[i,j]:=-1;
        'R' : begin
              a[i,j]:=1;
              ri:=i;
              rj:=j;
              end;
        'J' : begin
              a[i,j]:=-1;
              ij:=i;
              jj:=j;
              end;
        end;
        end;
        end;
end;

procedure rom(var drum : matrice);
begin
repeat
  ok:=true;
    for i:=1 to n do
        for j:=1 to m do
        begin
        x:=i; y:=j;
          if drum[i,j]>0 then
          begin
                  for k:=1 to 8 do
                  begin
                  xx:=x+dx[k];
                  yy:=y+dy[k];
                    if drum[xx,yy]=0 then begin drum[xx,yy]:=drum[i,j]+1;
                                                ok:=false;
                                          end
                                  else
                       if drum[xx,yy]>drum[i,j]+1 then begin drum[xx,yy]:=drum[i,j]+1;
                                                       ok:=false;
                                                 end;
                  end;
          end;
        end;
until ok;
end;


begin
citire(a,n,m,ij,jj,ri,rj);
b:=a; b[ri,rj]:=-1;
rom(a);
b[ij,jj]:=1;
rom(b);


min:=maxint;
for i:=1 to n do
        for j:=1 to m do
        if (a[i,j]=b[i,j]) and (a[i,j]>=1)
                              then if a[i,j]<min then begin
                              min:=a[i,j]; ii:=i; jj:=j;
                              end
                              else if a[i,j]=min then begin
                              if j<jj then begin
                                 ii:=i;
                                 jj:=j;
                                 end;
                              end;
writeln(g,min,' ',ii,' ',jj);
close(g);
end.