poj 2251 Dungeon Master

来源:互联网 发布:基本不定积分算法 编辑:程序博客网 时间:2024/05/20 04:08

这道是个用个简单的宽搜或者深搜就能做出来,只需要注意有上,下,左,上一层,下一层,后共计6个方向。

难点在于读懂题意,地牢分为了n层,注意到这一点就简单了。

#include <iostream>#include <queue>using namespace std;const int MAXSIZE = 300;struct coord {int x, y, z;int step;bool operator()(const coord &a, const coord &b){return a.step > b.step;}};char map[MAXSIZE][MAXSIZE][MAXSIZE];int direct[6][3] = {1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,-1,0,0,1};int main(){int i, j, k;while (true){int a, b, c;coord start;int sum;priority_queue<coord, vector<coord>, coord> s;cin >> i >> j >> k;if (i == 0 && j == 0 && k == 0)break;for (c = 1; c <= i; c++)for (a = 1; a <= j; a++)for (b = 1; b <= k; b++){cin >> map[c][a][b];if (map[c][a][b] == 'S'){start.z = c;start.x = a;start.y = b;start.step = 0;}}s.push(start);map[start.z][start.x][start.y] = '#';bool flag = false;while (!s.empty()){coord kk = s.top();s.pop();for (int b = 0; b < 6; b++){start.z = kk.z + direct[b][0];start.x = kk.x + direct[b][1];start.y = kk.y + direct[b][2];if (start.z >= 1 && start.x >= 1 && start.z >= 1 && start.z <= i&&start.x <= j&&start.y <= k){if (map[start.z][start.x][start.y] == '.'){start.step = kk.step + 1;s.push(start);map[start.z][start.x][start.y] = '#';}else if (map[start.z][start.x][start.y] == 'E'){flag = true;sum = kk.step + 1;break;}}}if (flag)break;}if (flag)cout << "Escaped in " << sum << " minute(s)." << endl;elsecout << "Trapped!" << endl;}}

0 0
原创粉丝点击