Cod sursa(job #908924)

Utilizator atatomirTatomir Alex atatomir Data 10 martie 2013 11:11:27
Problema Rj Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.25 kb
var n,m,i,h,rpos1,rpos2,jpos1,jpos2:longint;
    r,j:array[1..101,1..101]of longint;
    bufin:array[1..65000]of byte;
    x:char;
    min,pos1m,pos2m:longint;

procedure parcurge_r(x,y:integer);
begin
  if (x > 1) and ((r[x-1,y] > r[x,y]+1) or (r[x-1,y]=0)) then begin  r[x-1,y] := r[x,y]+1; parcurge_r(x-1,y);   end;
  if (x < n) and ((r[x+1,y] > r[x,y]+1) or (r[x+1,y]=0)) then begin  r[x+1,y] := r[x,y]+1; parcurge_r(x+1,y);   end;
  if (y > 1) and ((r[x,y-1] > r[x,y]+1) or (r[x,y-1]=0)) then begin  r[x,y-1] := r[x,y]+1; parcurge_r(x,y-1);   end;
  if (y < m) and ((r[x,y+1] > r[x,y]+1) or (r[x,y+1]=0)) then begin  r[x,y+1] := r[x,y]+1; parcurge_r(x,y+1);   end;
end;

procedure parcurge_j(x,y:integer);
begin
  if (x > 1) and ((j[x-1,y] > j[x,y]+1) or (j[x-1,y]=0)) then begin  j[x-1,y] := j[x,y]+1; parcurge_j(x-1,y);   end;
  if (x < n) and ((j[x+1,y] > j[x,y]+1) or (j[x+1,y]=0)) then begin  j[x+1,y] := j[x,y]+1; parcurge_j(x+1,y);   end;
  if (y > 1) and ((j[x,y-1] > j[x,y]+1) or (j[x,y-1]=0)) then begin  j[x,y-1] := j[x,y]+1; parcurge_j(x,y-1);   end;
  if (y < m) and ((j[x,y+1] > j[x,y]+1) or (j[x,y+1]=0)) then begin  j[x,y+1] := j[x,y]+1; parcurge_j(x,y+1);   end;
end;

begin
  assign(input,'rj.in'); reset(input);
  assign(output,'rj.out'); rewrite(output);
  settextbuf(input,bufin);

  readln(n,m);
  for i := 1 to n do
  begin
    for h := 1 to m do
    begin
      read(x);
      case x of
        'X':begin r[i,h] := -1; j[i,h] := -1;  end;
        ' ':begin r[i,h] :=  0; j[i,h] :=  0;  end;
        'R':begin r[i,h] :=  1; j[i,h] :=  0;  rpos1 := i; rpos2 := h; end;
        'J':begin r[i,h] :=  0; j[i,h] :=  1;  jpos1 := i; jpos2 := h; end;
      end;
    end;
    readln();
  end;


  parcurge_r(rpos1,rpos2);
  parcurge_j(jpos1,jpos2);

  {for i := 1 to n do
  begin
    for h := 1 to m do
    begin
      write(r[i,h],' ');
    end;
    writeln();
  end;   }



  min := 999999999;

  for i := 1 to n do
  begin
    for h := 1 to m do
    begin
      if (r[i,h] = j[i,h]) and (min > r[i,h]) and (r[i,h] >0) then
      begin
        min := r[i,h];
        pos1m := i;
        pos2m := h;
      end;
    end;
  end;

  writeln(min-1,' ',pos1m,' ',pos2m);

  close(input);
  close(output);
end.