Cod sursa(job #132600)

Utilizator valytgjiu91stancu vlad valytgjiu91 Data 6 februarie 2008 10:56:01
Problema Rj Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.27 kb
{$M 65520,0,655360}
const
     fi='rj.in';
     fo='rj.out';
     nmax=100;mmax=100;
     dl:array[1..8] of integer=(-1,-1, 0, 1, 1, 1, 0,-1);
     dc:array[1..8] of integer=( 0, 1, 1, 1, 0,-1,-1,-1);
type
     mat=array[1..nmax,1..mmax] of integer;
var
   f:text;
   A:array[1..nmax,1..mmax] of -1..1;
   i,n,m,k,l,c:shortint;
   b:char;
   xpr,ypr,xpj,ypj:shortint;
   R,J:mat;
   min:integer;

procedure Lee(var D:mat;l,k:shortint);
type punct=record
                 l,c:0..100;
           end;
var C:array[1..nmax*mmax] of punct;
    pc,uc,i,lv,cv:integer;
begin
     for i:=1 to nmax*mmax do begin
         C[i].l:=0;
         C[i].c:=0;
       end;
     pc:=1; uc:=1;
     D[l,k]:=1;
     C[pc].l:=l;
     C[pc].c:=k;
     while (pc<=uc) do
     begin
          for i:=1 to 8 do
          begin
               lv:=C[pc].l+dl[i];
               cv:=C[pc].c+dc[i];
               if (lv>=1)and (lv<=n) and (cv>=1) and (cv<=m) then
                  if (A[lv,cv]=0)and (D[lv,cv]=0) then begin
                                     D[lv,cv]:=D[C[pc].l,C[pc].c]+1;
                                     uc:=uc+1;
                                     C[uc].l:=lv;
                                     C[uc].c:=cv;
                     end;
          end;
          pc:=pc+1;
     end;
end;
Begin
     assign(f,fi);  reset(f);
     readln(f,n,m);
     for i:=1 to n do
     begin
          for k:=1 to m do
          begin
              read(f,b);
              case b of
                       'X': A[i,k]:=1;
                       ' ': A[i,k]:=0;
                       'R': begin xpr:=i; ypr:=k; A[i,k]:=0; end;
                       'J': begin xpj:=i; ypj:=k; A[i,k]:=0; end;
              end;
             end;
          readln(f);
     end;
     Lee(R,xpr,ypr);
     Lee(J,xpj,ypj);
     min:=MaxInt;
     For i:=1 to n do
         For k:=1 to m do
             if (R[i,k]=J[i,k]) and (R[i,k]<min) and (R[i,k]>0) and (J[i,k]>0)then begin
                                                min:=R[i,k];
                                                l:=i;
                                                c:=k;
                                   end;

     assign(f,fo);
     rewrite(f);
     write(f,min,' ',l,' ',c);
     close(f);
End.