HDU 1253

http://acm.hdu.edu.cn/showproblem.php?pid=1253

好不容易一个汉语的题目  

题意就是题目了

bfs

代码:

#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
int f,g,h,T,bx,by,bz,ex,ey,ez;
int a[52][52][52];
int XX[6][3]={{-1,0,0},{0,-1,0},{0,0,-1},{0,0,1},{0,1,0},{1,0,0}};
struct node{int x,y,z,step;};

int bfs()
{
int k,step;
node t;
queue<node>qu;
if(ex==0&&ey==0&&ez==0)return 0;
t.x=0, t.y=0, t.z=0, t.step=0;
qu.push(t);
a[0][0][0]=1;//1´ú±íǽ
while(!qu.empty())
{
t=qu.front();
qu.pop();

for(k=0;k<6;k++)
{ node tt=t;
tt.z+=XX[k][0], tt.x+=XX[k][1], tt.y+=XX[k][2];
if(tt.z==ez&&tt.x==ex&&tt.y==ey)
{ tt.step++;
if(tt.step<=T)return tt.step;
else return -1;
}
else if(tt.z>=0&&tt.z<h&&tt.x>=0&&tt.x<f&&tt.y>=0&&tt.y<g&&!a[tt.x][tt.y][tt.z])
{
a[tt.x][tt.y][tt.z]=1;
tt.step++;
qu.push(tt);
}

}
}
return -1;
}

int main()
{
int CASE,i,j,k;
scanf("%d",&CASE);
while(CASE--)
{
scanf("%d%d%d%d",&f,&g,&h,&T);
for(i=0;i<f;i++)
for(j=0;j<g;j++)
for(k=0;k<h;k++)
{
scanf("%d",&a[i][j][k]);
}
ex=f-1,ey=g-1,ez=h-1;
if(T<ex+ey+ez||a[ex][ey][ez]==1)
printf("-1\n");
else
printf("%d\n",bfs());
}
}



posted @ 2011-11-29 00:58  快乐.  阅读(228)  评论(0编辑  收藏  举报