hdu1253-胜利大逃亡 三维BFS
经典三维BFS,此题用DFS会超时,用BFS不剪枝也会超时,其实跟二维的BFS没什么区别
View Code
#include<stdio.h> #define maxn 31 struct node { int x,y,z; int cnt; }; const int dir[6][3]={{0,-1,0},{-1,0,0},{0,1,0},{1,0,0},{0,0,-1},{0,0,1}}; int map[maxn][maxn][maxn]; int a,b,c,t; int bfs() { node q[maxn*maxn*maxn]; node n,p; int i,rear=0,front=0; n.x=0;n.y=0;n.z=0;n.cnt=0; map[0][0][0]=1; q[rear++]=n; while(front<rear) { n=q[front++]; if(n.x==a-1&&n.y==b-1&&n.z==c-1&&n.cnt<=t)return n.cnt; if(n.cnt>t)return -1; for(i=0;i<6;i++) { p.x=n.x+dir[i][0]; p.y=n.y+dir[i][1]; p.z=n.z+dir[i][2]; if(p.x>=0&&p.x<a&&p.y>=0&&p.y<b&&p.z>=0&&p.z<c&&map[p.x][p.y][p.z]==0) { map[p.x][p.y][p.z]=1; p.cnt=n.cnt+1; q[rear++]=p; } } } return -1; } int main() { int i,j,k,T; //freopen("int.txt","r",stdin); scanf("%d",&T); for(int w=0;w<T;w++) { scanf("%d%d%d%d",&a,&b,&c,&t); for(i=0;i<a;i++) { for(j=0;j<b;j++) { for(k=0;k<c;k++) { scanf("%d",&map[i][j][k]); } } } if(t<a+b+c-3)printf("-1\n"); else printf("%d\n",bfs()); } return 0; }


浙公网安备 33010602011771号