题解 P1605 【迷宫】

「QQ红包」

2015-11-04 20:49:10

Solution

深度搜索。 要注意一个地方:棋盘内每一个点都可以走。只要该点在棋盘内就可以走。 ```delphi var n,m,t,x1,y1,x2,y2,sum,xx,yy,i:longint; a,b:array[-10..100,-10..100] of longint; procedure try(x,y:longint); begin if (x=x2)and(y=y2) then inc(sum) else begin if (x>=1)and(y>=1)and(x+1<=n)and(y<=m)and(a[x+1,y]=0) and(b[x+1,y]=0) then begin b[x+1,y]:=1;try(x+1,y);b[x+1,y]:=0; end; if (x>=1)and(y>=1)and(x<=n)and(y+1<=m)and(a[x,y+1]=0) and(b[x,y+1]=0) then begin b[x,y+1]:=1;try(x,y+1);b[x,y+1]:=0; end; if (x-1>=1)and(y>=1)and(x<=n)and(y<=m)and(a[x-1,y]=0) and(b[x-1,y]=0) then begin b[x-1,y]:=1;try(x-1,y);b[x-1,y]:=0; end; if (x>=1)and(y-1>=1)and(x<=n)and(y<=m)and(a[x,y-1]=0) and(b[x,y-1]=0) then begin b[x,y-1]:=1;try(x,y-1);b[x,y-1]:=0; end; end; end; begin fillchar(a,sizeof(a),0); fillchar(b,sizeof(b),0); read(n,m,t,x1,y1,x2,y2);//a[x2,y2]:=100; for i:=1 to t do begin read(xx,yy); a[xx,yy]:=1; end; b[x1,y1]:=1; try(x1,y1); write(sum); end. ```