範例程式碼 uva532

//uva532
#include <iostream>
#include <cstdio>

#define Max 31

using namespace std;

class node {
public:
	int x, y, z;

	node() {
		x = y = z = 0;
	}
	void set(int a, int b, int c) {
		x = a;
		y = b;
		z = c;
	}
}root, end;


char map[Max][Max][Max];
bool done[Max][Max][Max];
int path[Max][Max][Max];
class node que[30000];

void insert(int x, int y, int z, int &cnt, int dep) {
	que[cnt].set(x, y, z);
	path[x][y][z] = dep+1;
	done[x][y][z] = true;
	cnt++;
}

int main() {
	int L, R, C;
	int i, j, k;
	while(cin >> L >> R >> C && L) {
		for(i = 0; i < Max; i++)
			for(j = 0; j < Max; j++)
				for(k = 0; k < Max; k++)
					map[i][j][k] = done[i][j][k] = path[i][j][k] = 0;

		for(i = 0; i < L; i++)
			for(j = 0; j < R; j++) {
				scanf("%s", map[i][j]);
				for(k = 0; k < C; k++)
				{
					if(map[i][j][k] == 'S')
						root.set(i, j, k);
					else if(map[i][j][k] == 'E')
						end.set(i, j, k);
				}
			}

		que[0] = root;
		int head = 0, tail = 1, dep = 0;
		while(head < tail) {
			int tx = que[head].x, ty = que[head].y, tz = que[head].z, td = path[tx][ty][tz];

			if(tx > 0 	&& !done[tx-1][ty][tz] && map[tx-1][ty][tz] != '#')	insert(tx-1, ty  , tz  , tail, td);
			if(tx < L-1	&& !done[tx+1][ty][tz] && map[tx+1][ty][tz] != '#')	insert(tx+1, ty  , tz  , tail, td);
			if(ty > 0	&& !done[tx][ty-1][tz] && map[tx][ty-1][tz] != '#')	insert(tx  , ty-1, tz  , tail, td);
			if(ty < R-1	&& !done[tx][ty+1][tz] && map[tx][ty+1][tz] != '#')	insert(tx  , ty+1, tz  , tail, td);
			if(tz > 0	&& !done[tx][ty][tz-1] && map[tx][ty][tz-1] != '#')	insert(tx  , ty  , tz-1, tail, td);
			if(tz < C-1	&& !done[tx][ty][tz+1] && map[tx][ty][tz+1] != '#')	insert(tx  , ty  , tz+1, tail, td);

			head++;
		}

		if(path[end.x][end.y][end.z] > 0)
			printf("Escaped in %d minute(s).\n", path[end.x][end.y][end.z]);
		else
			printf("Trapped!\n");
	}
	return 0;
}