Cod sursa(job #1376944)

Utilizator mihaita_bogFilip-Dud Mihai mihaita_bog Data 5 martie 2015 19:27:37
Problema Rj Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.26 kb
program RJ;

const dl:array[1..8] of shortint=(-1,-1,-1,0,1,1,1,0);

      dc:array[1..8] of shortint=(-1,0,1,1,1,0,-1,-1);

      type harta=array[0..101,0..101] of integer;

var x,y,v:array[1..50] of integer;

    a,b:harta;

    m,n,lr,cr,lj,cj,k,d,l,c,dmin,i,j:integer;

    f:text;



procedure date;

var f:text;

    c:char;

begin

assign(f,'rj.in');

reset(f);

readln(f,m,n);

for i:=1 to m do

begin

for j:=1 to n do

begin

read(f,c);

if c='X' then a[i,j]:=-1;

if (c=' ')or(c='R')or (c='J') then a[i,j]:=m*n+1;

if c='R' then

begin

lr:=i;cr:=j;

end;

if c='J' then

begin

lj:=i;cj:=j;

end;

end;

readln(f);

end;

close(f);

for i:=0 to m+1 do

begin

a[i,0]:=-1;

a[i,n+1]:=-1;

end;

for j:=0 to n+1 do

begin

a[0,j]:=-1;

a[m+1,j]:=-1;

end;



for i:=0 to m+1 do

for j:=0 to n+1 do

b[i,j]:=a[i,j];

end;



function as(k:integer;var d:integer):boolean;

begin

if v[k]=8 then

begin

as:=false;

v[k]:=0;

end

else

begin

as:=true;

v[k]:=v[k]+1;

d:=v[k];

end;

end;



procedure tipar (var a:harta);

begin

for i:=1 to m do

begin

for j:=1 to n do

write(a[i,j]:3);

writeln;

end;

writeln;

end;



procedure fill(l,c:integer; var a:harta);

begin

k:=1;x[1]:=l;y[1]:=c;a[l,c]:=1;

while k>0 do

begin

  while as(k,d) do

  if a[x[k]+dl[d],y[k]+dc[d]]>k+1 then

  begin

  k:=k+1;

  x[k]:=x[k-1]+dl[d]; y[k]:=y[k-1]+dc[d];

  a[x[k],y[k]]:=k;

  end;

k:=k-1;

end;

end;

begin

    date;

   { l:=lr;c:=cr;

 k:=1;x[1]:=l;y[1]:=c;a[l,c]:=1;

while k>0 do

begin

  while as(k,d) do

  if a[x[k]+dl[d],y[k]+dc[d]]>k+1 then

  begin

  k:=k+1;tipar(a);readln;

  x[k]:=x[k-1]+dl[d]; y[k]:=y[k-1]+dc[d];

  a[x[k],y[k]]:=k;

  end;

k:=k-1;

end;  }

    fill(lr,cr,a);

   { tipar(a);}

    fill(lj,cj,b);

    {tipar(b);}

    dmin:=m*n+1;

    for i:=1 to m do

    for j:=1 to n do

    if (a[i,j]=b[i,j])and(a[i,j]<>-1)and(a[i,j]<>m*n+1)  then

        if a[i,j]<dmin then

        begin

        l:=i;k:=j;dmin:=a[i,j];

        end;

assign(f,'rj.out');

  rewrite(f);

    write(f,dmin,' ',l,' ',k);

    close(f);

end.