Cod sursa(job #281250)

Utilizator SzabiVajda Szabolcs Szabi Data 13 martie 2009 22:54:58
Problema Rj Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 3.03 kb
program romeoesjulia;
type tipus=record

    x:0..5000;
    i,j:1..100;
end;
var n,m,i,j,ri,rj,ji,jj,k,meg,megi,megj:word;
    temp:char;
    a:array[1..100,1..100] of -1..60000;
    f,g:text;
    x,y:array[1..8] of -1..1;
    b:array[1..6000] of tipus;


function jelen(i,j:word):boolean;
var jo:boolean;
    z:word;
begin
jo:=false;
z:=1;

while (z<=k) and (not jo) do begin
if (b[z].i=i) and (b[z].j=j) then jo:=true;
inc(z);
end;


jelen:=jo;
end;


procedure romeo;
var i,j,kk:word;
begin
  for kk:=1 to 8 do begin
if(b[1].i+x[kk]>=1)and(b[1].i+x[kk]<=n)and(b[1].j+y[kk]>=1)and(b[1].j+y[kk]<=m)and(a[b[1].i+x[kk],b[1].j+y[kk]]=0)then begin
          a[b[1].i+x[kk],b[1].j+y[kk]]:=b[1].x+1;
          b[k+1].i:=b[1].i+x[kk];
          b[k+1].j:=b[1].j+y[kk];
          b[k+1].x:=b[1].x+1;
          inc(k);
      end;
  end;
end;


procedure julia;
var i,j,kk:word;
begin
  for kk:=1 to 8 do begin
if(b[1].i+x[kk]>=1)and(b[1].i+x[kk]<=n)and(b[1].j+y[kk]>=1)and(b[1].j+y[kk]<=m)and(a[b[1].i+x[kk],b[1].j+y[kk]]<>-1)then begin
     if b[1].x+1<a[b[1].i+x[kk],b[1].j+y[kk]] then begin

          a[b[1].i+x[kk],b[1].j+y[kk]]:=b[1].x+1;
          b[k+1].i:=b[1].i+x[kk];
          b[k+1].j:=b[1].j+y[kk];
          b[k+1].x:=b[1].x+1;
          inc(k);
          end else
          if (b[1].x+1=a[b[1].i+x[kk],b[1].j+y[kk]]) and (b[1].x+1<meg) and (not jelen(b[1].i+x[kk],b[1].j+y[kk])) then begin
              meg:=b[1].x+1;
              megi:=b[1].i+x[kk];
              megj:=b[1].j+y[kk];
          end;


      end;
  end;
end;






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,temp);
            if temp=' ' then a[i,j]:=0 else
            if temp='X' then a[i,j]:=-1 else
            if temp='R' then begin
                ri:=i;
                rj:=j;
                a[i,j]:=-1;

            end else
            if temp='J' then begin
              ji:=i;
              jj:=j;
              a[i,j]:=-1;

            end;

        end;
       readln(f);

    end;
    x[1]:=-1;y[1]:=-1;
    x[2]:=-1;y[2]:=0;
    x[3]:=-1;y[3]:=1;
    x[4]:=0;y[4]:=-1;
    x[5]:=0;y[5]:=1;
    x[6]:=1;y[6]:=-1;
    x[7]:=1;y[7]:=0;
    x[8]:=1;y[8]:=1;

    k:=1;b[k].x:=1;b[k].i:=ri;b[k].j:=rj;

    while k>0 do begin
        romeo;
        for i:=1 to k-1 do begin
          b[i].x:=b[i+1].x;
          b[i].i:=b[i+1].i;
          b[i].j:=b[i+1].j;

        end;
     dec(k);
    end;


        k:=1;b[k].x:=1;b[k].i:=ji;b[k].j:=jj;
     meg:=65535;
    while k>0 do begin
        julia;
        for i:=1 to k-1 do begin
          b[i].x:=b[i+1].x;
          b[i].i:=b[i+1].i;
          b[i].j:=b[i+1].j;

        end;
     dec(k);
    end;





 {  for i:=1 to n do begin
       for j:=1 to m do
       write(g,a[i,j],' ');
       writeln(g);


   end;}

    write(g,meg,' ',megi,' ',megj);
    close(f);
    close(g);

end.