Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
求助,双向BFS超时各位牛帮忙看看哪里错了 const maxn=90000; dx:array[1..8]of longint=(-1,-1,-2,-2,1,1,2,2); dy:array[1..8]of longint=(-2,2,-1,1,-2,2,-1,1); type ass=record x,y,g:longint; end; var t,h:array[0..1]of longint; troop:array[0..1,1..90001]of ass; ttt,tt,l,i,x1,y1,x2,y2:longint; f:array[0..1,0..299,0..299]of 0..1; yes:boolean; procedure add(xx:longint); var i,ii,nowx,nowy:longint; now:ass; begin inc(h[xx]); now:=troop[xx,h[xx]]; for i:=1 to 8 do begin nowx:=now.x+dx[i]; nowy:=now.y+dy[i]; if (nowx>=0)and (nowx<=l-1)and (nowy>=0)and (nowy<=l-1)and(f[xx,nowx,nowy]=0) then begin inc(t[xx]); troop[xx,t[xx]].x:=nowx; troop[xx,t[xx]].y:=nowy; troop[xx,t[xx]].g:=now.g+1; f[xx,nowx,nowy]:=1; for ii:=1 to t[1-xx] do if (troop[1-xx,ii].x=troop[xx,t[xx]].x)and (troop[1-xx,ii].y=troop[xx,t[xx]].y)then begin writeln(troop[1-xx,ii].g+troop[xx,t[xx]].g); yes:=true; exit; end; end; end; end; begin readln(tt); for ttt:=1 to tt do begin readln(l); readln(x1,y1); readln(x2,y2); if (x1=x2)and (y1=y2)then begin writeln(0); continue;end; for i:=1 downto 0 do begin t[i]:=1; h[i]:=0; end; troop[0,1].x:=x1; troop[0,1].y:=y1; troop[1,1].x:=x2; troop[1,1].y:=y2; fillchar(f,sizeof(f),0); f[0,x1,y1]:=1; f[1,x2,y2]:=1; yes:=false; repeat if (t[0]<=t[1]) and not((h[0]>=t[0])or(t[0]>=maxn))then add(0); if yes then break; if (t[1]<=t[0]) and not((h[1]>=t[1])or(t[1]>=maxn))then add(1); if yes then break; if not((h[0]>=t[0])or(t[0]>=maxn))then add(0); if yes then break; if not((h[1]>=t[1])or(t[1]>=maxn))then add(1); until ((h[1]>=t[1])or(t[1]>=maxn))and ((h[0]>=t[0])or (t[0]>=maxn)) or yes; end; end. Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator