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
",t);
66         else
67             printf ("-1
");
68     }
69     return 0;
70 }