Cod sursa(job #273163)

Utilizator FllorynMitu Florin Danut Flloryn Data 8 martie 2009 11:42:41
Problema Car Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.49 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[0..2000000]of longint;
     n,i,j,k,m,x1,x2,y1,y2,t,k1,k2,d,x,y:longint;
     v:array[0..510,0..510]of longint;
     pv:array[0..510,0..510,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:=0;
    close(f);
    k1:=8;
    k2:=0;
    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]]<2)then begin k1:=k1+1;
                                                                                 ad[k1]:=ad[i];
                                                                                 ax[k1]:=x;
                                                                                 ay[k1]:=y;
                                                                                 pv[x,y,ad[i]]:=pv[ax[i],ay[i],d]+1;
                                                                           end;
    d:=(ad[i]+7)mod 8;
    if pv[ax[i],ay[i],d]<1 then begin k2:=k2+1;
                                      bd[k2]:=d;
                                      bx[k2]:=ax[i];
                                      by[k2]:=ay[i];
                                      pv[ax[i],ay[i],d]:=pv[ax[i],ay[i],d]+1;
                                      if(bx[k2]=x2)and(by[k2]=y2)then t:=1;
                                end;
    d:=(ad[i]+1)mod 8;
    if pv[ax[i],ay[i],d]<1 then begin k2:=k2+1;
                                      bd[k2]:=d;
                                      bx[k2]:=ax[i];
                                      by[k2]:=ay[i];
                                      pv[ax[i],ay[i],d]:=pv[ax[i],ay[i],d]+1;
                                     if(bx[k2]=x2)and(by[k2]=y2)then t:=1;
                                end;
    if(ax[i]=x2)and(ay[i]=y2)then t:=1;
    end;
    k1:=k2;
    k2:=0;
    for i:=1 to k1 do
    begin
    ax[i]:=bx[i];
    ay[i]:=by[i];
    ad[i]:=bd[i];
    end;
    if t=0 then c:=c+1;
    end;
    if(k2=0)and(t=0)then c:=-1;
    assign(f,'car.out');
    rewrite(f);
    writeln(f,c);
    close(f);
 end