Cod sursa(job #1096498)

Utilizator andrei_toaderToader Andrei Sorin andrei_toader Data 2 februarie 2014 09:59:32
Problema Rj Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.78 kb
program rj;
var f,g:text;
    a,b:array[0..102,0..102] of integer;
    dx:array[1..8] of integer=(0,0,1,-1,-1,1,-1,1);
    dy:array[1..8] of integer=(-1,1,0,0,-1,1,1,-1);
    m,n,i,j,rx,ry,jx,jy,xmin,ymin:integer;
    vrx,vry,vjx,vjy:array[1..100000] of longint;
    x:char;
    st,sf,tmin:longint;

begin
 assign (F,'rj.in'); reset (f);
 assign (g,'rj.out');rewrite (G);
 readln (f,n,m);
 for i:=1 to n do
 begin
  for j:=1 to m do
  begin
    read (f,x);
    if x='R' then
    begin
     rx:=i; ry:=j;
    end
    else
     if x='J' then
     begin
      jx:=i; jy:=j;
     end
     else
     if x='X' then
     begin
      a[i,j]:=-1; b[i,j]:=-1;
     end;
  end;
  readln (F);
 end;
 for i:=0 to n+1 do
 begin
  a[i,0]:=-1; a[i,m+1]:=-1;
  b[i,0]:=-1; b[i,m+1]:=-1;
 end;
 for j:=0 to m+1 do
 begin
  a[0,j]:=-1; a[n+1,j]:=-1;
  b[0,j]:=-1; b[n+1,j]:=-1;
 end;
 a[rx,ry]:=1;
 vrx[1]:=rx; vry[1]:=ry; st:=0; sf:=1;
 while st<sf do
 begin
  st:=st+1;
  for i:=1 to 8 do
  if a[vrx[st]+dx[i],vry[st]+dy[i]]=0 then
  begin
   a[vrx[st]+dx[i],vry[st]+dy[i]]:=a[vrx[st],vry[st]]+1;
   sf:=sf+1;
   vrx[sf]:=vrx[st]+dx[i];
   vry[sf]:=vry[st]+dy[i];
  end;
 end;
 b[jx,jy]:=1; vjx[1]:=jx; vjy[1]:=jy; st:=0; sf:=1;
 while st<sf do
 begin
 st:=st+1;
 for i:=1 to 8 do
  if b[vjx[st]+dx[i],vjy[st]+dy[i]]=0 then
  begin
   b[vjx[st]+dx[i], vjy[st]+dy[i]]:=b[vjx[st],vjy[st]]+1;
   sf:=sf+1;
   vjx[sf]:=vjx[st]+dx[i];
   vjy[sf]:=vjy[st]+dy[i];
  end;
 end;
 tmin:=maxlongint; xmin:=-1; ymin:=-1;
 for i:=1 to n do
  for j:=1 to m do
   if a[i,j]=b[i,j] then
    if (a[i,j]<tmin) and (a[i,j]<>-1) and (a[i,j]<>0) then
    begin
     tmin:=a[i,j]; xmin:=i; ymin:=j;
    end;
    write (g,tmin,' ',xmin, ' ',ymin);
 close (F); close (g);
end.