Cod sursa(job #699943)

Utilizator paulborzaBorza Paul paulborza Data 29 februarie 2012 22:06:14
Problema Rj Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.99 kb
const dl:array [1..8] of shortint=(0,1,1,1,0,-1,-1,-1);
      dc:array [1..8] of shortint=(1,1,0,-1,-1,-1,0,1);

type coord=record
     l,c:byte
    end;

type matrice=array [0..101,0..101] of integer;

var a,b:matrice;
    n,m,l01,c01,l02,c02:integer;

procedure citire;
var x:char;
    i,j:integer;
    f1,f2:text;
begin
 assign (f1,'rj.in'); reset(f1);
 readln (f1,n,m);
 for i:=1 to n do
 begin
  for j:=1 to m do
  begin
   read(f1,x);
   if x='X' then
   begin
    a[i,j]:=-1;
    b[i,j]:=-1;
   end
   else if x='R' then
   begin
    a[i,j]:=1;
    l01:=i;
    c01:=j;
   end
   else if x='J' then
   begin
    b[i,j]:=1;
    l02:=i;
    c02:=j;
   end;
  end;
  readln(f1);
 end;
 close(f1);
end;

procedure bordurare(var a:matrice;n,m:integer);
var i:integer;
begin
 for i:=0 to m+1 do
  a[0,i]:=-1;
 for i:=0 to n+1 do
  a[i,0]:=-1;
 for i:=0 to m+1 do
  a[n+1,i]:=-1;
 for i:=0 to n+1 do
  a[i,m+1]:=-1;
end;

procedure lee(var a:matrice; l0,c0,p,q:integer);
var x:array[1..30000] of coord;
    i,s,k,lc,cc,lv,cv:integer;
    acasa:boolean;
begin
 i:=1; s:=1; x[1].l:=l0; x[1].c:=c0; acasa:=false;
 while (i<=s) and not(acasa) do
 begin
  lc:=x[i].l;
  cc:=x[i].c;
  k:=1;
  while (k<=8) and not(acasa) do
  begin
   lv:=lc+dl[k];
   cv:=cc+dc[k];
   if a[lv,cv]=0 then
   begin
    a[lv,cv]:=a[lc,cc]+1;
    s:=s+1;
    x[s].l:=lv;
    x[s].c:=cv;
   end;
   if (lv=p) and (cv=q) then
    acasa:=true
   else k:=k+1;
  end;
  i:=i+1;
 end;
end;

procedure afisare(a,b:matrice;n,m:integer);
var i,j,tmin,f,g:integer;
    f2:text;
begin
 assign (f2,'rj.out'); rewrite(f2);
 tmin:=maxint;
 for i:=1 to n do
  for j:=1 to m do
   if (a[i,j]>0) and (a[i,j]=b[i,j]) and (a[i,j]<tmin) then
   begin
    tmin:=a[i,j];
    f:=i;
    g:=j;
   end;
 write(f2,tmin,' ',f,' ',g);
 close(f2);
end;

begin
 citire;
 bordurare(a,n,m);
 bordurare(b,n,m);
 lee(a,l01,c01,l02,c02);
 lee(b,l02,c02,l01,c01);
 afisare(a,b,n,m);
end.