uva532(三维简单宽度优先搜索)

来源:互联网 发布:备案域名到期查询 编辑:程序博客网 时间:2024/04/28 07:49

简单不解释。。。

/*****************************************Author      :Crazy_AC(JamesQi)Time        :2015File Name   :*****************************************/// #pragma comment(linker, "/STACK:1024000000,1024000000")#include <iostream>#include <algorithm>#include <iomanip>#include <sstream>#include <string>#include <stack>#include <queue>#include <deque>#include <vector>#include <map>#include <set>#include <stdio.h>#include <string.h>#include <math.h>#include <stdlib.h>#include <limits.h>using namespace std;#define MEM(a,b) memset(a,b,sizeof a)typedef long long LL;typedef unsigned long long ULL;typedef pair<int,int> ii;const int inf = 1 << 30;const int INF = 0x3f3f3f3f;const int MOD = 1e9 + 7;inline int Readint(){char c = getchar();while(!isdigit(c)) c = getchar();int x = 0;while(isdigit(c)){x = x * 10 + c - '0';c = getchar();}return x;}char mp[40][40][40];int d[40][40][40];int dx[] = {1,-1,0,0,0,0};int dy[] = {0,0,1,-1,0,0};int dz[] = {0,0,0,0,1,-1};struct node{int x,y,z;int dis;node(){}node(int x,int y,int z,int dis):x(x),y(y),z(z),dis(dis){}};int n,m,c;bool check(int x,int y,int z){if (x < 0 || x >= n) return false;//[0,n - 1]if (y < 0 || y >= m) return false;//[0,m - 1]if (z < 0 || z >= c) return false;//[0,c - 1]return true;}bool bfs(int x,int y,int z){node tmp = node(x,y,z,0);queue<node> que;que.push(tmp);while(!que.empty()){tmp = que.front();que.pop();if (mp[tmp.x][tmp.y][tmp.z] == 'E') return true;for (int i = 0;i < 6;i++){int nx = tmp.x + dx[i];int ny = tmp.y + dy[i];int nz = tmp.z + dz[i];if (!check(nx,ny,nz)) continue;if (d[nx][ny][nz] == 0 && mp[nx][ny][nz] != '#' && mp[nx][ny][nz] != 'S'){d[nx][ny][nz] = tmp.dis + 1;if (mp[nx][ny][nz] == 'E') return true;que.push(node(nx,ny,nz,d[nx][ny][nz]));}}}return false;}int main(){// freopen("in.txt","r",stdin);// freopen("out.txt","w",stdout);while(~scanf("%d%d%d",&n,&m,&c) && (n || m || c)){int x,y,z;int tx,ty,tz;memset(d, 0,sizeof d);memset(mp, 0,sizeof mp);for (int i = 0;i < n;i++){for (int j = 0;j < m;j++){scanf("%s",mp[i][j]);for (int k = 0;k < c;k++){if (mp[i][j][k] == 'S'){x = i;y = j;z = k;}if (mp[i][j][k] == 'E'){tx = i;ty = j;tz = k;}}}}if (bfs(x,y,z)) printf("Escaped in %d minute(s).\n",d[tx][ty][tz]);else printf("Trapped!\n");}return 0;}


0 0
原创粉丝点击