Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdlib>
- #include <iostream>
- #include <stdio.h>
- #include <cstring>
- #include <vector>
- #include <algorithm>
- #include <utility>
- #include <queue>
- #include <map>
- #include <stack>
- #include <cmath>
- #include <set>
- #define INF 99999999
- #define rep(i, a, b) for (int i = int(a); i < int(b); i++)
- #define TRvii(c, it) for (vii::iterator it = (c).begin(); it != (c).end(); it++)
- #define tr(it, s) for ( typeof ( s.begin( ) ) it=s.begin( ); it!=s.end( ); it++ )
- #define pb push_back
- #define clr(a) memset((a),0,sizeof(a))
- #define pi 3.1415926535897932384626433832795028841971
- using namespace std;
- typedef long long ll;
- typedef pair < int, int > ii;
- typedef vector < int > vi;
- typedef vector < ii > vii;
- int n, l, c, px, py, pz, fx, fy, fz;
- char m[32][32][32];
- bool vis[32][32][32];
- int dx[] = {0, 0, 0, 0, 1, -1};
- int dy[] = {0, 0, 1, -1, 0, 0};
- int dz[] = {1, -1, 0, 0, 0, 0};
- struct ponto{
- int x, y, z;
- };
- bool dentro(int x, int y, int z){
- return(x>=0 && y>=0 && z>=0 && x<n && y<l && z<c);
- }
- int bfs(int x, int y, int z){
- memset(vis,false,sizeof(vis));
- queue<pair<int,ponto> > q;
- ponto p;
- p.x = x; p.y = y; p.z = z;
- q.push(make_pair(0,p));
- vis[x][y][z] = true;
- while(!q.empty()){
- ponto pp = q.front().second;
- int mov = q.front().first;
- q.pop();
- rep(i,0,6){
- int nx = pp.x + dx[i];
- int ny = pp.y + dy[i];
- int nz = pp.z + dz[i];
- if(dentro(nx,ny,nz) && !vis[nx][ny][nz] && m[nx][ny][nz] != '#'){
- ponto ppp;
- vis[nx][ny][nz] = true;
- ppp.x = nx; ppp.y = ny; ppp.z = nz;
- q.push(make_pair(mov+1,ppp));
- if(m[nx][ny][nz] == 'E')
- return mov+1;
- }
- }
- }
- return INF;
- }
- int main(){
- char branco[10];
- while(scanf("%d%d%d",&n,&l,&c) && n+l+c){
- getchar();
- rep(i,0,n){
- rep(j,0,l)
- rep(k,0,c){
- scanf(" %c",&m[i][j][k]);
- if(m[i][j][k] == 'S'){
- px = i; py = j; pz = k;
- }
- }
- gets(branco);
- }
- int ans = bfs(px, py, pz);
- if(ans == INF)
- printf("Trapped!\n");
- else
- printf("Escaped in %d minute(s).\n",ans);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment