Cod sursa(job #389926)

Utilizator yoannaserb ioana yoanna Data 2 februarie 2010 15:23:28
Problema Rj Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.96 kb
program romeo_julieta;
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 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-1);
addr(c1^.x-1,c1^.y);
addr(c1^.x-1,c1^.y+1);
addr(c1^.x,c1^.y-1);
addr(c1^.x,c1^.y+1);
addr(c1^.x+1,c1^.y-1);
addr(c1^.x+1,c1^.y);
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-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,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-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;
u:=c2;
c2:=c2^.adr;
dispose(u);
until d[c2^.x,c2^.y]>t-1;
until k=true;
write(g,t,' ',sf2^.x,' ',sf2^.y);
close(f);
close(g);
end.