Cod sursa(job #277393)

Utilizator cheery_g1rlHaller Emanuela cheery_g1rl Data 11 martie 2009 18:19:42
Problema Rj Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 5.34 kb
type nod=record
      x,y:integer;
         end;
var a:array[0..101,0..101] of char;
    r,j:array[1..100,1..100] of integer;
    lc,min,n,m,i,k,xr,xj,yr,yj:integer;
    s:string;
    c:array[1..10000] of nod;
procedure apelr(x,y:integer);
   begin
     r[x,y]:=1;
     lc:=1; c[1].x:=x; c[1].y:=y;
     i:=1;
     while i<=lc do
       begin
         if (a[c[i].x,c[i].y-1]<>'X')and(r[c[i].x,c[i].y-1]=-1) then
            begin
              r[c[i].x,c[i].y-1]:=r[c[i].x,c[i].y]+1;
              inc(lc);
              c[lc].x:=c[i].x;
              c[lc].y:=c[i].y-1;
            end;
         if (a[c[i].x,c[i].y+1]<>'X')and(r[c[i].x,c[i].y+1]=-1) then
            begin
              r[c[i].x,c[i].y+1]:=r[c[i].x,c[i].y]+1;
              inc(lc);
              c[lc].x:=c[i].x;
              c[lc].y:=c[i].y+1;
            end;
         if (a[c[i].x-1,c[i].y-1]<>'X')and(r[c[i].x-1,c[i].y-1]=-1) then
            begin
              r[c[i].x-1,c[i].y-1]:=r[c[i].x,c[i].y]+1;
              inc(lc);
              c[lc].x:=c[i].x-1;
              c[lc].y:=c[i].y-1;
            end;
            if (a[c[i].x-1,c[i].y]<>'X')and(r[c[i].x-1,c[i].y]=-1) then
            begin
              r[c[i].x-1,c[i].y]:=r[c[i].x,c[i].y]+1;
              inc(lc);
              c[lc].x:=c[i].x-1;
              c[lc].y:=c[i].y;
            end;
         if (a[c[i].x-1,c[i].y+1]<>'X')and(r[c[i].x-1,c[i].y+1]=-1) then
            begin
              r[c[i].x-1,c[i].y+1]:=r[c[i].x,c[i].y]+1;
              inc(lc);
              c[lc].x:=c[i].x-1;
              c[lc].y:=c[i].y+1;
            end;
         if (a[c[i].x+1,c[i].y-1]<>'X')and(r[c[i].x+1,c[i].y-1]=-1) then
            begin
              r[c[i].x+1,c[i].y-1]:=r[c[i].x,c[i].y]+1;
              inc(lc);
              c[lc].x:=c[i].x+1;
              c[lc].y:=c[i].y-1;
            end;
         if (a[c[i].x+1,c[i].y]<>'X')and(r[c[i].x+1,c[i].y]=-1) then
            begin
              r[c[i].x+1,c[i].y]:=r[c[i].x,c[i].y]+1;
              inc(lc);
              c[lc].x:=c[i].x+1;
              c[lc].y:=c[i].y;
            end;
         if (a[c[i].x+1,c[i].y+1]<>'X')and(r[c[i].x+1,c[i].y+1]=-1) then
            begin
              r[c[i].x+1,c[i].y+1]:=r[c[i].x,c[i].y]+1;
              inc(lc);
              c[lc].x:=c[i].x+1;
              c[lc].y:=c[i].y+1;
            end;
         inc(i);
       end;
   end;

procedure apelj(x,y:integer);
   begin
     j[x,y]:=1;
     lc:=1; c[1].x:=x; c[1].y:=y;
     i:=1;
     while i<=lc do
       begin
         if (a[c[i].x,c[i].y-1]<>'X')and(j[c[i].x,c[i].y-1]=-1) then
            begin
              j[c[i].x,c[i].y-1]:=j[c[i].x,c[i].y]+1;
              inc(lc);
              c[lc].x:=c[i].x;
              c[lc].y:=c[i].y-1;
            end;
         if (a[c[i].x,c[i].y+1]<>'X')and(j[c[i].x,c[i].y+1]=-1) then
            begin
              j[c[i].x,c[i].y+1]:=j[c[i].x,c[i].y]+1;
              inc(lc);
              c[lc].x:=c[i].x;
              c[lc].y:=c[i].y+1;
            end;
         if (a[c[i].x-1,c[i].y-1]<>'X')and(j[c[i].x-1,c[i].y-1]=-1) then
            begin
              j[c[i].x-1,c[i].y-1]:=j[c[i].x,c[i].y]+1;
              inc(lc);
              c[lc].x:=c[i].x-1;
              c[lc].y:=c[i].y-1;
            end;
            if (a[c[i].x-1,c[i].y]<>'X')and(j[c[i].x-1,c[i].y]=-1) then
            begin
              j[c[i].x-1,c[i].y]:=j[c[i].x,c[i].y]+1;
              inc(lc);
              c[lc].x:=c[i].x-1;
              c[lc].y:=c[i].y;
            end;
         if (a[c[i].x-1,c[i].y+1]<>'X')and(j[c[i].x-1,c[i].y+1]=-1) then
            begin
              j[c[i].x-1,c[i].y+1]:=j[c[i].x,c[i].y]+1;
              inc(lc);
              c[lc].x:=c[i].x-1;
              c[lc].y:=c[i].y+1;
            end;
         if (a[c[i].x+1,c[i].y-1]<>'X')and(j[c[i].x+1,c[i].y-1]=-1) then
            begin
              j[c[i].x+1,c[i].y-1]:=j[c[i].x,c[i].y]+1;
              inc(lc);
              c[lc].x:=c[i].x+1;
              c[lc].y:=c[i].y-1;
            end;
         if (a[c[i].x+1,c[i].y]<>'X')and(j[c[i].x+1,c[i].y]=-1) then
            begin
              j[c[i].x+1,c[i].y]:=j[c[i].x,c[i].y]+1;
              inc(lc);
              c[lc].x:=c[i].x+1;
              c[lc].y:=c[i].y;
            end;
         if (a[c[i].x+1,c[i].y+1]<>'X')and(j[c[i].x+1,c[i].y+1]=-1) then
            begin
              j[c[i].x+1,c[i].y+1]:=j[c[i].x,c[i].y]+1;
              inc(lc);
              c[lc].x:=c[i].x+1;
              c[lc].y:=c[i].y+1;
            end;
         inc(i);
       end;
   end;

begin
assign(input,'rj.in'); reset(input);
assign(output,'rj.out'); rewrite(output);
readln(n,m);
for i:=1 to n do
  begin
    readln(s);
  for k:=1 to m do
      begin
        a[i,k]:=s[k];
        r[i,k]:=-1; j[i,k]:=-1;
        if a[i,k]='R' then begin xr:=i; yr:=k; end
          else if a[i,k]='J' then begin xj:=i; yj:=k; end;
      end;
  end;
for i:=0 to n+1 do
  begin
    a[i,0]:='X'; a[i,m+1]:='X';
  end;
for i:=0 to m+1 do
  begin
    a[0,i]:='X'; a[n+1,i]:='X';
  end;

apelr(xr,yr);
apelj(xj,yj);


 min:=n*m+1;
for i:=1 to n do
  for k:=1 to m do
     if (r[i,k]=j[i,k])and(r[i,k]<min)and(r[i,k]<>-1) then
       begin
         min:=r[i,k]; xr:=i; yr:=k;
       end;

writeln(min,' ',xr,' ',yr);
close(input); close(output);

end.