HDU1253
View Code
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<iostream> 5 #include<queue> 6 #include<algorithm> 7 #define N 55 8 int map[N][N][N]; 9 int a,b,c,maxt,ans; 10 int fmin(int i,int j){ 11 return i>j?j:i; 12 } 13 using namespace std; 14 struct point { 15 int x,y,z; 16 int lev; 17 }; 18 point p,pp; 19 queue<point>q; 20 int dx[6]={0,-1,0,1,0,0}; 21 int dy[6]={-1,0,1,0,0,0}; 22 int dz[6]={0,0,0,0,1,-1}; 23 24 void bfs(int sz,int sx,int sy){ 25 int i,j,k,tx,ty,tz; 26 p.x=sx; 27 p.y=sy; 28 p.z=sz; 29 p.lev=0; 30 while(!q.empty()) 31 q.pop(); 32 q.push(p); 33 while(!q.empty()){ 34 p=q.front(); 35 q.pop(); 36 if(p.x==b-1&&p.y==c-1&&p.z==a-1){ 37 ans=fmin(ans,p.lev); 38 } 39 for(i=0;i<6;i++){ 40 pp.x=p.x; 41 pp.y=p.y; 42 pp.z=p.z; 43 pp.x+=dx[i]; 44 pp.y+=dy[i]; 45 pp.z+=dz[i]; 46 if(pp.z<0||pp.z>=a||pp.x<0||pp.x>=b||pp.y<0||pp.y>=c||map[pp.z][pp.x][pp.y]==1) 47 continue; 48 map[pp.z][pp.x][pp.y]=1; 49 pp.lev=p.lev+1; 50 q.push(pp); 51 } 52 } 53 } 54 55 int main(){ 56 int t,i,j,k; 57 scanf("%d",&t); 58 while(t--){ 59 scanf("%d%d%d%d",&a,&b,&c,&maxt); 60 for(i=0;i<a;i++) 61 for(j=0;j<b;j++) 62 for(k=0;k<c;k++) 63 scanf("%d",&map[i][j][k]); 64 ans=999999; 65 map[0][0][0]=1;//墙 66 bfs(0,0,0); 67 if(ans<=maxt) 68 printf("%d\n",ans); 69 else 70 printf("-1\n"); 71 } 72 return 0; 73 }
keep moving...