Cod sursa(job #609828)

Utilizator ctlin04UAIC.VlasCatalin ctlin04 Data 23 august 2011 15:47:41
Problema Rj Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 4.9 kb
Program Rj;
 type punct=record
      x,y:integer;
      end;
var a,aux:array [0..101,0..101] of integer;
   b,c:array [1..10000] of punct;
   i,j,k,n,m,k1,t,x,y,min,x1,y1:integer;
   ch:char;
   fi,fo:text;
procedure control_a(x,y:integer);
begin
  if a[x-1,y]=-1 then begin
                       a[x-1,y]:=a[x,y]+1;
                       inc(k);
                       c[k].x:=x-1;
                       c[k].y:=y;
                       end;
   if a[x+1,y]=-1 then begin
                       a[x+1,y]:=a[x,y]+1;
                       inc(k);
                       c[k].x:=x+1;
                       c[k].y:=y;
                       end;
    if a[x,y-1]=-1 then begin
                       a[x,y-1]:=a[x,y]+1;
                       inc(k);
                       c[k].x:=x;
                       c[k].y:=y-1;
                       end;
     if a[x,y+1]=-1 then begin
                       a[x,y+1]:=a[x,y]+1;
                       inc(k);
                       c[k].x:=x;
                       c[k].y:=y+1;
                       end;
     if a[x+1,y+1]=-1 then begin
                       a[x+1,y+1]:=a[x,y]+1;
                       inc(k);
                       c[k].x:=x+1;
                       c[k].y:=y+1;
                       end;
     if a[x-1,y+1]=-1 then begin
                       a[x-1,y+1]:=a[x,y]+1;
                       inc(k);
                       c[k].x:=x-1;
                       c[k].y:=y+1;
                       end;
     if a[x+1,y-1]=-1 then begin
                       a[x+1,y-1]:=a[x,y]+1;
                       inc(k);
                       c[k].x:=x+1;
                       c[k].y:=y-1;
                       end;
     if a[x-1,y-1]=-1 then begin
                       a[x-1,y-1]:=a[x,y]+1;
                       inc(k);
                       c[k].x:=x-1;
                       c[k].y:=y-1;
                       end;
    end;
 procedure control_aux(x,y:integer);
begin
  if aux[x-1,y]=-1 then begin
                       aux[x-1,y]:=aux[x,y]+1;
                       inc(k);
                       c[k].x:=x-1;
                       c[k].y:=y;
                       end;
   if aux[x+1,y]=-1 then begin
                       aux[x+1,y]:=aux[x,y]+1;
                       inc(k);
                       c[k].x:=x+1;
                       c[k].y:=y;
                       end;
    if aux[x,y-1]=-1 then begin
                       aux[x,y-1]:=aux[x,y]+1;
                       inc(k);
                       c[k].x:=x;
                       c[k].y:=y-1;
                       end;
     if aux[x,y+1]=-1 then begin
                       aux[x,y+1]:=aux[x,y]+1;
                       inc(k);
                       c[k].x:=x;
                       c[k].y:=y+1;
                       end;
     if aux[x+1,y+1]=-1 then begin
                       aux[x+1,y+1]:=aux[x,y]+1;
                       inc(k);
                       c[k].x:=x+1;
                       c[k].y:=y+1;
                       end;
     if aux[x-1,y+1]=-1 then begin
                       aux[x-1,y+1]:=aux[x,y]+1;
                       inc(k);
                       c[k].x:=x-1;
                       c[k].y:=y+1;
                       end;
     if aux[x+1,y-1]=-1 then begin
                       aux[x+1,y-1]:=aux[x,y]+1;
                       inc(k);
                       c[k].x:=x+1;
                       c[k].y:=y-1;
                       end;
     if aux[x-1,y-1]=-1 then begin
                       aux[x-1,y-1]:=aux[x,y]+1;
                       inc(k);
                       c[k].x:=x-1;
                       c[k].y:=y-1;
                       end;
    end;
begin
 assign(fi,'rj.in');
  assign(fo,'rj.out');
 reset(fi);
 rewrite(fo);
 readln(fi,n,m);
 for i:=1 to n do begin
  for j:=1 to m do begin
                    read(fi,ch);
                    if ch=' ' then begin a[i,j]:=-1; aux[i,j]:=-1; end;
                    if ch='X' then begin a[i,j]:=-2; aux[i,j]:=-1; end;
                    if ch='R' then begin x1:=i; y1:=j; end;
                    if ch='J' then begin x:=i; y:=j; end;
                    end;
  readln(fi);
  end;
  k1:=1;
  a[x1,y1]:=1;
  aux[x,y]:=1;
 a[x,y]:=-1;
 aux[x1,y1]:=-1;
 b[1].x:=x1; b[1].y:=y1;
 while a[x,y]=-1 do begin
  for i:=1 to k1 do control_a(b[i].x,b[i].y);
    k1:=k;
     k:=0;
  for i:=1 to k1 do b[i]:=c[i];
 end;
 b[1].x:=x; b[1].y:=y; k1:=1; k:=0; min:=10000;
 while aux[x1,y1]=-1 do begin
  for i:=1 to k1 do control_aux(b[i].x,b[i].y);
    k1:=k;
     k:=0;
  for i:=1 to k1 do b[i]:=c[i];
 end;
for i:=1 to n do
 for j:=1 to m do
  if (a[i,j]=aux[i,j]) and (a[i,j]>0) and (a[i,j]<min) then begin
                                                  min:=a[i,j];
                                                  x:=i; y:=j;
                                                  end;
 write(fo,min,' ',x,' ',y);
close(fo);
end.