http://poj.org/problem?id=2251
#include <stdio.h> #include <iostream> #include <math.h> #include <stdlib.h> #include < ctype.h> #include <algorithm> #include <vector> #include <string.h> #include <queue> # include<stack> #include <set> #include <sstream> #include <time.h> #include <utility> #in clude<malloc.h> #include <stdexcept> #include <iomanip> #include <iterator> using namespace std ; Char map[40][40][40];int vis[40][40][40];int L, R, c;struct node{int z, x, Y;int C;}; int Dir[6][3] = {{1, 0, 0}, {-1, 0, 0}, {0,-1, 0}, {0, 1, 0}, {0, 0,-1}, {0, 0, 1}};int BFS (int si, int sj , int sk) {memset (Vis, 0, sizeof (VIS));queue<node> q;node cur, next;cur.z = si, cur.x = sj, cur.y = sk, cur.c = 0;vis [Si] [SJ] [SK] = 1;q.push (cur), while (!q.empty ()) {cur = Q.front (), Q.pop (); for (int i = 0; i < 6; i++) {next.z = Cur.z + dir[i][0]; Next.x = cur.x + dir[i][1];next.y = cur.y + dir[i][2];next.c = cur.c + 1; if (next.z<1 | | next.z>l | | next.x<1 | | next.x>r | | next.y<1 | | next.y>c | | map[next.z][next.x][next.y] = = ' # ') continue;if (map[next.z][next.x][next.y] = = ' E ') return Next.c;if (!vis[next.z][next.x][next.y]) {vis[next.z][ NEXT.X][NEXT.Y] = 1;q.push (next);}}} return 0;} int main () {int Si, SJ, sk;while (CIN >> L >> R >> C) {if (L = = 0 && R = = 0 && C = 0) Brea k;for (int i = 1; I <= L; i++) for (int j = 1; J <= R; j + +) for (int k = 1; k <= C; k++) {cin >> map[i][j][k]; if (map[i][j][k] = = ' S ') {si = i; sj = j; sk = k;}} int ans = BFS (si, SJ, SK), if (ans = = 0) printf ("trapped!\n"), elseprintf ("escaped in%d minute (s). \ n", ans); return 0;}
poj-2251 Wide Search