标签:
链接:
http://poj.org/problem?id=2251
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 21370 | Accepted: 8299 |
Description
Input
Output
Escaped in x minute(s).
Trapped!
Sample Input
3 4 5 S.... .###. .##.. ###.# ##### ##### ##.## ##... ##### ##### #.### ####E 1 3 3 S## #E# ### 0 0 0
Sample Output
Escaped in 11 minute(s). Trapped!
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> #include <queue> using namespace std; #define N 35 struct node { int x, y, z, step; }; char Map[N][N][N]; node e; int L, R, C; int dir[6][3]={{0,0,-1},{0,0,1},{0,-1,0},{0,1,0},{-1,0,0},{1,0,0}}; bool Judge(node s) { return s.x>=0 && s.x<L && s.y>=0 && s.y<R && s.z>=0 && s.z<C && Map[s.x][s.y][s.z]!=‘#‘; } int BFS(node s) { node p; queue<node>Q; Q.push(s); while(Q.size()) { s = Q.front(), Q.pop(); if(s.x==e.x && s.y==e.y && s.z==e.z) return s.step; for(int i=0; i<6; i++) { p.x = s.x + dir[i][0]; p.y = s.y + dir[i][1]; p.z = s.z + dir[i][2]; p.step = s.step + 1; if(Judge(p)) { Q.push(p); Map[p.x][p.y][p.z] = ‘#‘; } } } return -1; } int main() { while(scanf("%d%d%d", &L, &R, &C), L+R+C) { node s; memset(Map, 0, sizeof(Map)); for(int i=0; i<L; i++) for(int j=0; j<R; j++) { scanf("%s", Map[i][j]); for(int k=0; k<C; k++) { if(Map[i][j][k]==‘S‘) s.x=i, s.y=j, s.z=k, s.step=0; if(Map[i][j][k]==‘E‘) e.x=i, e.y = j, e.z=k; } } int ans = BFS(s); if(ans==-1) printf("Trapped!\n"); else printf("Escaped in %d minute(s).\n", ans); } return 0; }
(广搜)Dungeon Master -- poj -- 2251
标签:
原文地址:http://www.cnblogs.com/YY56/p/4782854.html