Cod sursa(job #362062)

Utilizator ionutz32Ilie Ionut ionutz32 Data 7 noiembrie 2009 20:33:09
Problema Rj Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.84 kb
type ref=^nod;
nod=record
    x,y:byte;
    adr:ref;
    end;
var a:array[0..101,0..101] of byte;
d,d2:array[1..100,1..100] of integer;
c1,c2,sf1,sf2,u:ref;
m,n,i,j,t,a3,b,a2,b2:word;
c:char;
f,g:text;
k:boolean;
procedure addr(x,y:byte);
          begin
          if (x>0) and (x<=m) and (y>0) and (y<=n) and (a[x,y]=0) and (d[x,y]=0) and not ((x=a3) and (y=b)) then
             begin
             d[x,y]:=t;
             new(u);
             u^.x:=x;
             u^.y:=y;
             u^.adr:=nil;
             sf1^.adr:=u;
             sf1:=u;
             end;
          end;
procedure addj(x,y:byte);
          begin
          if (x>0) and (x<=m) and (y>0) and (y<=n) and (a[x,y]=0) and (d2[x,y]=0) and not ((x=a2) and (y=b2)) then
             begin
             if d[x,y]=t then
                k:=true;
             d2[x,y]:=t;
             new(u);
             u^.x:=x;
             u^.y:=y;
             sf2^.adr:=u;
             sf2:=u;
             end;
          end;
begin
assign(f,'rj.in');
assign(g,'rj.out');
reset(f);rewrite(g);
readln(f,m,n);
for i:=1 to m do
    begin
    for j:=1 to n do
        begin
        read(f,c);
        case c of
             'X':a[i,j]:=1;
             'R':begin
                 a[i,j]:=2;
                 new(c1);
                 c1^.x:=i;
                 c1^.y:=j;
                 a3:=i;
                 b:=j;
                 c1^.adr:=nil;
                 sf1:=c1;
                 end;
             'J':begin
                 a[i,j]:=3;
                 new(c2);
                 c2^.x:=i;
                 c2^.y:=j;
                 a2:=i;
                 b2:=j;
                 c2^.adr:=nil;
                 sf2:=c2;
                 end;
             end;
        end;
    readln(f);
    end;
t:=1;
repeat
      inc(t);
      repeat
            addr(c1^.x-1,c1^.y);
            addr(c1^.x,c1^.y-1);
            addr(c1^.x,c1^.y+1);
            addr(c1^.x+1,c1^.y);
            addr(c1^.x-1,c1^.y-1);
            addr(c1^.x-1,c1^.y+1);
            addr(c1^.x+1,c1^.y-1);
            addr(c1^.x+1,c1^.y+1);
            u:=c1;
            c1:=c1^.adr;
            dispose(u);
      until d[c1^.x,c1^.y]>t-1;
      repeat
            addj(c2^.x-1,c2^.y);if k=true then break;
            addj(c2^.x,c2^.y-1);if k=true then break;
            addj(c2^.x,c2^.y+1);if k=true then break;
            addj(c2^.x+1,c2^.y);if k=true then break;
            addj(c2^.x-1,c2^.y-1);if k=true then break;
            addj(c2^.x-1,c2^.y+1);if k=true then break;
            addj(c2^.x+1,c2^.y-1);if k=true then break;
            addj(c2^.x+1,c2^.y+1);if k=true then break;
            u:=c2;
            c2:=c2^.adr;
            dispose(u);
      until d2[c2^.x,c2^.y]>t-1;
until k=true;
write(g,t,' ',sf2^.x,' ',sf2^.y);
close(f);close(g);
end.