Cod sursa(job #133828)

Utilizator vladnVlad Nistorica vladn Data 9 februarie 2008 20:32:01
Problema Rj Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.97 kb
const dx:array[1..8] of integer=(0,1,1,1,0,-1,-1,-1);
      dy:array[1..8] of integer=(1,1,0,-1,-1,-1,0,1);
var r:array[1..150,1..150] of longint;
    j:array[1..150,1..150] of longint;
    q:array[1..30000,1..2] of longint;
    f,g:text;
    x:char;
    n,m,i,k,dr,st,xx,yy,p,l,ri,rj,ji,jj,min:longint;
begin
assign(f,'rj.in');reset(f);
assign(g,'rj.out');rewrite(g);
readln(f,n,m);i:=0;
while not eof(f) do begin
    inc(i);k:=0;
    while not eoln(f) do begin
        inc(k);
        read(f,x);
        case x of  'X':begin j[i,k]:=-1;r[i,k]:=-1;end;
                   'R':begin ri:=i;rj:=k;r[i,k]:=1;end;
                   'J':begin ji:=i;jj:=k;j[i,k]:=1;end;
                   ' ':begin j[i,k]:=0;r[i,k]:=0;end;
        end;
    end;
    readln(f);
end;
st:=1;dr:=1;q[1,1]:=ri;q[1,2]:=rj;
while dr<=st do begin
      xx:=q[dr,1];yy:=q[dr,2];
      for i:=1 to 8 do
          if (xx+dx[i]<=n) and (xx+dx[i]>=1) and (yy+dy[i]<=m)
             and (yy+dy[i]>=1) and (r[xx+dx[i],yy+dy[i]]=0) then begin
                r[xx+dx[i],yy+dy[i]]:=r[xx,yy]+1;
                inc(st);
                q[st,1]:=xx+dx[i];q[st,2]:=yy+dy[i];
          end;
      inc(dr);
end;
st:=1;dr:=1;q[1,1]:=ji;q[1,2]:=jj;
while dr<=st do begin
      xx:=q[dr,1];yy:=q[dr,2];
      for i:=1 to 8 do
          if (xx+dx[i]<=n) and (xx+dx[i]>=1) and (yy+dy[i]<=m)
             and (yy+dy[i]>=1) and (j[xx+dx[i],yy+dy[i]]=0) then begin
                j[xx+dx[i],yy+dy[i]]:=j[xx,yy]+1;
                inc(st);
                q[st,1]:=xx+dx[i];q[st,2]:=yy+dy[i];
          end;
      inc(dr);
end;
min:=3200;
for i:=1 to n do
    for k:=1 to m do
        if (r[i,k]<>-1) and (r[i,k]<>0) and (r[i,k]=j[i,k]) and (r[i,k]<min) then begin
                                                      min:=r[i,k];
                                                       p:=i;
                                                       l:=k;
        end;
writeln(g,min,' ',p,' ',l);
close(g);
end.