Cod sursa(job #205978)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 3 septembrie 2008 20:01:15
Problema Rj Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.58 kb
const v1:array[1..8]of shortint=(-1,-1,-1,0,0,1,1,1);
      v2:array[1..8]of shortint=(-1,0,1,-1,1,-1,0,1);
var f,g:text;
    n,m,i,j,lr,cr,lj,cj,min:longint;
    x:char;
    a,b:array[0..110,0..110]of integer;

procedure lee(l,c:longint);
var vl,vc,v:array[0..11000]of integer;
    p,h,i:longint;
begin
  vl[1]:=l;
  vc[1]:=c;
  v[1]:=1;
  p:=1;
  h:=1;
  while (p<=h)do
    begin
      for i:=1 to 8 do
        if (a[vl[p]+v1[i],vc[p]+v2[i]]=0)and(vl[p]+v1[i]>0)and
          (vl[p]+v1[i]<=n)and(vc[p]+v2[i]>0)and(vc[p]+v2[i]<=m)then
          begin
            inc(h);
            vl[h]:=vl[p]+v1[i];
            vc[h]:=vc[p]+v2[i];
            v[h]:=v[p]+1;
            a[vl[p]+v1[i],vc[p]+v2[i]]:=v[h];
          end;
      inc(p);
    end;
end;

begin
assign(f,'rj.in');
assign(g,'rj.out');
reset(f);
rewrite(g);
readln(f,n,m);
for i:=1 to n do
  begin
    for j:=1 to m do
      begin
        read(f,x);
        if (x='X')then a[i,j]:=-1 else
        if (x='R')then
          begin
            lr:=i;
            cr:=j;
          end else
        if (x='J')then
          begin
            lj:=i;
            cj:=j;
          end;
      end;
    readln(f);
  end;
a[lr,cr]:=1;
lee(lr,cr);
b:=a;
for i:=1 to n do
  for j:=1 to m do
    if (a[i,j]<>-1)then
      a[i,j]:=0;
a[lj,cj]:=1;
lee(lj,cj);
min:=maxint;
for i:=1 to n do
  for j:=1 to m do
    if (a[i,j]=b[i,j])and(a[i,j]>0)and(a[i,j]<min)then
      begin
        min:=a[i,j];
        lr:=i;
        cr:=j;
      end;
writeln(g,min,' ',lr,' ',cr);
close(f);
close(g);
end.