HDU ACM 1253 胜利大逃亡(广搜BFS)

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

 

View Code
 1 /*题意:在一个三维空间中,一个人从起点走到终点每走一步要一秒,求走到终点的时间。
 2 若走到终点的时间小于规定时间,输出时间,否则输出-1
 3 
 4 注意:要清楚X Y Z 个代表哪一个坐标
 5 */
 6 #include <iostream>
 7 #include <stdio.h>
 8 #include <queue>
 9 using namespace std;
10 int point[6][3]={0,0,1,0,0,-1,1,0,0,-1,0,0,0,1,0,0,-1,0};  //重点,遍历时的偏移量,向哪个方向遍历
11 
12 struct FUN
13 {
14     int x,y,z;
15     int step;                       //记录步数
16 };
17 int time;
18 int k,a,b,c,t;
19 int used[1100];
20 int map[55][55][55];
21 int BFS()
22 {
23     time = 0;
24     memset(used,0,sizeof(used));
25     queue <FUN> x;
26     FUN q;
27     q.x=0;
28     q.y=0;
29     q.z=0;
30     q.step=0;
31     x.push(q);
32     map[0][0][0] = 1;
33     while(!x.empty())
34     {
35         FUN y = x.front();
36         x.pop();
37         int i=0;
38         for(i=0;i<6;i++)                       
39         {    
40             q.x = y.x + point[i][0];
41             q.y = y.y + point[i][1];
42             q.z = y.z + point[i][2];
43             q.step = y.step + 1;
44             if(q.x>=0 && q.x<a && q.y>=0 && q.y<b && q.z>=0 && q.z<c)
45             {
46                 if(map[q.x][q.y][q.z] == 0)
47                 {
48                     x.push(q);
49                     map[q.x][q.y][q.z] = 1;
50                     if(q.step > t)
51                     {
52                         return 0;
53                     }
54                     if(q.x == a-1 && q.y == b-1 && q.z == c-1)
55                     {
56                         return q.step;
57                     }
58                 }
59             }
60         }
61     }
62     return 0;
63 }
64 int main()
65 {
66     
67     while(cin>>k)
68     {
69         while(k--)
70         {
71             int i,j,l;
72 
73             cin>>a>>b>>c>>t;
74             for(i=0;i<a;i++)
75             {
76                 for(j=0;j<b;j++)
77                 {
78                     for(l=0;l<c;l++)
79                     {
80                         scanf("%d",&map[i][j][l]);
81                     }
82                 }
83             }
84             int m = BFS();
85             if(m)
86             {
87                 cout<<m<<endl;
88             }
89             else
90             {
91                 cout<<-1<<endl;
92             }
93         }
94     }
95     return 0;
96 }

 

 

 

 

posted @ 2012-05-26 13:07  zx雄  阅读(251)  评论(0编辑  收藏  举报