Cod sursa(job #1786533)

Utilizator miha1000Dica Mihai miha1000 Data 23 octombrie 2016 11:18:13
Problema Rj Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.15 kb
type celula=record
      lin,col:integer;
    end;
    mat=array[1..100,1..100]of integer;
var a,b:mat;
    v:array[1..10000]of celula;
    l,n,m,i,q,w,j,min,lmin,cmin,t,x,y,lr,lj,cr,cj:integer;
    vl,vc:array[1..8] of integer;
    c:char;
    f,g:text;



procedure lee(var c:mat;i,j:integer);
begin
     c[i,j]:=1;
     x:=1;
     y:=1;
     V[1].lin:=i;
     v[1].col:=j;
     while x<=y do
      begin
        for t:=1 to 8 do
          begin
            q:=V[x].lin+vl[t];
            w:=v[x].col+vc[t];
            if (q<=n) and (q>=1) and (w<=m) and (w>=1) and
              (c[q,w]=0) then
               begin
                  inc(y);
                  V[y].lin:=q;
                  V[y].col:=w;
                  c[q,w]:=c[V[x].lin,V[x].col]+1;
               end;
          end;
          inc(x);
      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,c);
          case c of
            'x':
              begin
                A[i,j]:=-1; B[i,j]:=-1;
              end;
            ' ':
              begin
                A[i,j]:=0; b[i,j]:=0;
              end;
            'r':
              begin
                a[i,j]:=0;
                b[i,j]:=0;
                lr:=i;
                cr:=j;
              end;
            'j':
              begin
                   a[i,j]:=0;
                   b[i,j]:=0;
                   lj:=i;
                   cj:=j;
              end;
            end;
        end;
        readln(f);
      end;
    close(f);
    writeln;
    vl[1]:=-1;vl[2]:=-1;vl[3]:=0;vl[4]:=1;vl[5]:=1;
    vl[6]:=1;vl[7]:=0;vl[8]:=-1;
    vc[1]:=0;vc[2]:=1;vc[3]:=1;vc[4]:=1;vc[5]:=0;
    vc[6]:=-1;vc[7]:=-1;vc[8]:=-1;
    lee(a,lr,cr);
    lee(b,lj,cj);
    min:=10001;
    for i:=1 to n do
      for j:=1 to m do
       if (A[i,j]=b[i,j]) and (A[i,j]<min) and (A[i,j]>0) then
        begin
          min:=a[i,j];
          lmin:=i;
          cmin:=j;
        end;
    writeln(g,lmin,' ',cmin,' ',min);
    close(g);
end.