首页 > 代码库 > hdu 1253 胜利大逃亡(简单题)

hdu 1253 胜利大逃亡(简单题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1253

题目大意:在所给的时间能顺利离开城堡。

 

 1 #include <iostream> 2 #include <cstdio> 3 #include <queue> 4 #include <cstring> 5 using namespace std; 6 int map[55][55][55],visit[55][55][55],a,b,c,T; 7 int dir[6][3]= {0,0,1,0,0,-1,0,1,0,0,-1,0,1,0,0,-1,0,0}; 8 struct next 9 {10     int x;11     int y;12     int z;13     int t;14 } s,ss;15 queue<next>q,qq;16 int bfs()17 {18     s.x=0;19     s.y=0;20     s.z=0;21     s.t=0;22     map[0][0][0]=1;23     q.push(s);24     while (!q.empty())25     {26         s=q.front();27         q.pop();28         for (int i=0; i<6; i++)29         {30             int t=s.t+1;31             int x=s.x+dir[i][0],y=s.y+dir[i][1],z=s.z+dir[i][2];32             if (x>=0&&x<a&&y>=0&&y<b&&z>=0&&z<c&&t<=T&&map[x][y][z]==0&&!visit[x][y][z])33             {34                 if(x==a-1&&y==b-1&&z==c-1)35                 {36                     return t;37                 }38                 ss.x=x;39                 ss.y=y;40                 ss.z=z;41                 ss.t=t;42                 visit[x][y][z]=1;43                 q.push(ss);44 45             }46         }47     }48     return -1;49 }50 int main ()51 {52     int o,i,j,k;53     scanf ("%d",&o);54     while (o--)55     {56         memset(visit,0,sizeof(visit));57         q=qq;58         scanf ("%d%d%d%d",&a,&b,&c,&T);59         for (i=0; i<a; i++)60             for (j=0; j<b; j++)61                 for (k=0; k<c; k++)62                     scanf ("%d",&map[i][j][k]);63         int t=bfs();64         if (t>=0)65             printf ("%d\n",t);66         else67             printf ("-1\n");68     }69     return 0;70 }