Uva--532 (BFS)

2014-07-07 02:07:12

题意&思路:三维BFS。需要注意的是,终点判断在for循环外面超时,在for循环最里面时AC,原因在于:在for循环里时,就是在走之前就判断下一步是否是终点,省了“一圈”。

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <queue>
 4 #include <cstring>
 5 #include <algorithm>
 6 using namespace std;
 7 const int INF = 1000000000;
 8 
 9 char g[35][35][35];
10 int L,R,C,tmin,sr,sc,st,er,ec,et;
11 int vis[35][35][35];
12 int dir[6][3] = {{0,0,1},{0,0,-1,},{0,1,0},{0,-1,0},{1,0,0},{-1,0,0}};
13 
14 struct node{
15     int t,r,c,d;
16     node(){
17         d = 0;
18     }
19 };
20 void Bfs(){
21     node a,b;
22     queue<node> q;
23     a.t = st;
24     a.r = sr;
25     a.c = sc;
26     vis[a.t][a.r][a.c] = 1;
27     q.push(a);
28     while(!q.empty()){
29         a = q.front();
30         q.pop();
31         for(int i = 0; i < 6; ++i){
32             b.t = a.t + dir[i][0];
33             b.r = a.r + dir[i][1];
34             b.c = a.c + dir[i][2];
35             b.d = a.d + 1;
36             if(b.t >= 0 && b.t < L && b.r >= 0 && b.r < R && b.c >= 0 && b.c < C
37                 && !vis[b.t][b.r][b.c] && g[b.t][b.r][b.c] != '#'){
38                 if(b.t == et && b.r == er && b.c == ec){
39                     tmin = b.d;
40                     return;
41                 }
42                 q.push(b);
43                 vis[b.t][b.r][b.c] = 1;
44             }
45         }
46     }
47     tmin = INF;
48     return;
49 }
50 int main(){
51     //char str[35];
52     while(scanf("%d %d %d",&L,&R,&C) == 3){
53         if(!L && !R && !C) break;
54         memset(vis,0,sizeof(vis));
55         memset(g,0,sizeof(g));
56         for(int t = 0; t < L; ++t){
57             for(int i = 0; i < R; ++i){
58                 scanf("%s",g[t][i]);
59                 for(int j = 0; j < C; ++j){
60                     if(g[t][i][j] == 'S')
61                         st = t,sr = i,sc = j;
62                     else if(g[t][i][j] == 'E')
63                         et = t,er = i,ec = j;
64                 }
65             }
66         }
67         Bfs();
68         if(tmin == INF) printf("Trapped!\n");
69         else printf("Escaped in %d minute(s).\n",tmin);
70     }
71     return 0;
72 }

 

posted @ 2014-07-07 02:09  Naturain  阅读(159)  评论(0)    收藏  举报