Cod sursa(job #206250)

Utilizator GavrilaVladGavrila Vlad GavrilaVlad Data 5 septembrie 2008 14:46:03
Problema Car Scor 40
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.2 kb
const d1:array[0..7]of longint=(-1,-1,0,1,1,1,0,-1);
      d2:array[0..7]of longint=(0,1,1,1,0,-1,-1,-1);
var ax,ay,ad,bx,by,bd:array[1..10000000]of longint;
    n,i,j,k,m,x1,x2,y1,y2,t,k1,k2,d,x,y:longint;
    v:array[0..1510,0..1510]of longint;
    pv:array[0..1510,0..1510,0..7]of longint;
    f:text;
    c:int64;
begin
   assign(f,'car.in');
   reset(f);
   read(f,n,m);
   read(f,x1,y1,x2,y2);
   for i:=1 to 8 do
   begin
   ax[i]:=x1;
   ay[i]:=y1;
   ad[i]:=i-1;
   pv[x1,y1,i-1]:=1;
   end;
   for i:=1 to n do
   for j:=1 to m do
   read(f,v[i,j]);
   c:=-1;
   close(f);
   k1:=8;
   while(t=0)and(k1>0)do
   begin
   i:=0;
   while(i<k1)do
   begin
   i:=i+1;
   d:=ad[i];
   x:=ax[i]+d1[d];
   y:=ay[i]+d2[d];
   if(v[x,y]=0)and(x>0)and(y>0)and(x<=n)and(y<=m)and(pv[x,y,ad[i]]=0)then begin k1:=k1+1;
                                                                                ad[k1]:=ad[i];
                                                                                ax[k1]:=x;
                                                                                ay[k1]:=y;
                                                                                pv[x,y,ad[i]]:=1;
                                                                          end;
   d:=(ad[i]+7)mod 8;
   if pv[ax[i],ay[i],d]=0 then begin k2:=k2+1;
                                     bd[k2]:=d;
                                     bx[k2]:=ax[i];
                                     by[k2]:=ay[i];
                                     pv[ax[i],ay[i],d]:=1;
                               end;
   d:=(ad[i]+1)mod 8;
   if pv[ax[i],ay[i],d]=0 then begin k2:=k2+1;
                                     bd[k2]:=d;
                                     bx[k2]:=ax[i];
                                     by[k2]:=ay[i];
                                     pv[ax[i],ay[i],d]:=1;
                               end;
   if(ax[i]=x2)and(ay[i]=y2)then t:=1;
   end;
   k1:=k2;
   k2:=0;
   c:=c+1;
   for i:=1 to k1 do
   begin
   ax[i]:=bx[i];
   ay[i]:=by[i];
   ad[i]:=bd[i];
   end;
   end;
  {if(k2=0)and(t=0)then c:=-1;   }
   assign(f,'car.out');
   rewrite(f);
   writeln(f,c);
   close(f);
end.