Cod sursa(job #82308)

Utilizator dumitru_andradadumitru guadalupe dumitru_andrada Data 6 septembrie 2007 15:14:59
Problema Rj Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.92 kb
type matrice= array[1..100] of string;
const dx : array[1..8]of integer = (-1,-1,-1,0,0,1,1,1);
      dy : array[1..8]of integer =(-1,0,1,-1,1,-1,0,1);
var a,b :matrice;
    s : string;
    f,g : text;
    n,i,j,m,k,xx,yy,x,y,ij,jj,ri,rj,ii,min,ver,code : integer;
    ok : boolean;

procedure citire(var a : matrice;var n,m,ij,jj,ri,rj : integer);
var i,j,k : integer;
begin
assign(f,'rj.in'); reset(f);
assign(g,'rj.out'); rewrite(g);
read(f,n,m); readln(f);
for i:=1 to n do begin
readln(f,a[i]);
if length(a[i])<>m then for k:=1 to m-length(a[i])+1 do a[i]:=a[i]+' ';
      for j:=1 to m do begin
        case a[i][j] of
        ' ' : a[i][j]:='0';
      {  'X' : a[i][j]:='-1';
        'x' : a[i][j]:=-1;  }
        'R' : begin
              a[i][j]:='1';
              ri:=i;
              rj:=j;
              end;
        'J' : begin
              a[i][j]:='0';
              ij:=i;
              jj:=j;
              end;
        end;
        end;
        end;
end;

procedure rom(var drum : matrice);
begin
repeat
  ok:=true;
    for i:=1 to n do
        for j:=1 to m do
        begin
        x:=i; y:=j;
          if (drum[i][j]>'0') and (drum[i,j]<>'X') then
          begin
                  for k:=1 to 8 do
                  begin
                  xx:=x+dx[k];
                  yy:=y+dy[k];
                  if (xx>0) and (yy>0) and (xx<=n) and (yy<=m)
                     and (drum[xx][yy]<>'X')
                  then
                  begin
                    if drum[xx][yy]='0' then begin
                                        drum[xx][yy]:=chr(ord(drum[i][j])+1);
                                        ok:=false;
                                             end
                                  else
                       if ord(drum[xx][yy])>ord(drum[i][j])+1
                       then begin drum[xx][yy]:=chr(ord(drum[i][j])+1);
                                                       ok:=false;
                                                 end;
                  end;
                  end;
          end;
        end;
until ok;
end;


begin
citire(a,n,m,ij,jj,ri,rj);
b:=a; b[ri,rj]:='0';
rom(a);
b[ij,jj]:='1';
rom(b);


min:=maxint;
for i:=1 to n do
        for j:=1 to m do
        begin
        val(a[i,j],ver,code);
        if (a[i][j]=b[i][j]) and (a[i][j]>='1') and (a[i][j]<>'X')
                              then BEGIN
                              if ver<min then begin
                              min:=ord(a[i][j])-48; ii:=i; jj:=j;
                              end
                              else if ver=min then begin
                              if j<jj then begin
                                 ii:=i;
                                 jj:=j;
                                 end;
                              end;END;
        end;
writeln(g,min,' ',ii,' ',jj);
close(g);
end.