// UVa 532 - Dungeon Master #include <iostream> #include <string> #include <stdio.h> #include <queue> #include <string.h> using namespace std; int move[6][3] = { { 1, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 }, { -1, 0, 0 }, { 0, -1, 0 }, { 0, 0, -1 } }; struct pos { int i, j, k; }; bool operator ==(pos a, pos b) { return a.i == b.i && a.j == b.j && a.k == b.k; } int main() { int l, r, c; while ((cin >> l >> r >> c) && (l || r || c)) { string dummy; pos s, e; string dungeon[30][30]; for (int i = 0; i < l; i++) { getline(cin, dummy); for (int j = 0; j < r; j++) { getline(cin, dungeon[i][j]); for (int k = 0; k < c; k++) if (dungeon[i][j][k] == 'S') { s.i = i; s.j = j; s.k = k; } else if (dungeon[i][j][k] == 'E') { e.i = i; e.j = j; e.k = k; } } } int T[30][30][30]; memset(T, 127, sizeof(T)); bool found = false; queue<pos> q; q.push(s); T[s.i][s.j][s.k] = 0; while (!found && !q.empty()) { pos b4 = q.front(); q.pop(); for (int m = 0; m < 6; m++) { pos now; now.i = b4.i + move[m][0]; now.j = b4.j + move[m][1]; now.k = b4.k + move[m][2]; if (now.i >= 0 && now.i < l && now.j >= 0 && now.j < r && now.k >= 0 && now.k < c && dungeon[now.i][now.j][now.k] != '#') { T[now.i][now.j][now.k] = T[b4.i][b4.j][b4.k] + 1; if (now == e) { found = true; break; } q.push(now); dungeon[now.i][now.j][now.k] = '#'; } } } if (found) printf("Escaped in %d minute(s).\n", T[e.i][e.j][e.k]); else printf("Trapped!\n"); } return 0; }
Tuesday, June 9, 2015
UVa 532 - Dungeon Master
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment