您的位置:首页 > 其它

POJ 2251 Dungeon Master

2013-06-16 15:22 267 查看
题目见此:http://poj.grids.cn/practice/2251/

解题思路:

一道BFS简单题,可以用来练手

唯一值得说一下的就是31,32行处不要写成x=i, y=j, z=k,因为i、z表示层数,j、x表示行数,k、y表示列数

贴代码:

#include <iostream>
#include <queue>
#include <string.h>
using namespace std;

bool b[32][32][32];
int r, c, l;
int dx[6]={0, 0, 1, 0, 0, -1}, dy[6]={0, 1, 0, 0, -1, 0}, dz[6]={1, 0, 0, -1, 0, 0};

struct Node
{
int x, y, z, time;
bool operator == (const Node& a) const
{
if(x == a.x && y == a.y && z == a.z)    return 1;
else    return 0;
}
}p, q;

int main()
{
while(cin >> l >> r >> c, r || c || l)
{
memset(b, 0, sizeof(b));
for(int i=1 ; i<=l ; i++)
for(int j=1 ; j<=r ; j++)
for(int k=1 ; k<=c ; k++)
{
char ch;
cin >> ch;
if(ch == 'S')    {p.z = i, p.x = j, p.y = k, p.time = 0;}
else if(ch == 'E')    {q.z = i, q.x = j, q.y = k; b[i][j][k] = 1;}
else if(ch == '.')    b[i][j][k] = 1;
}
queue<Node> Q;
Q.push(p);
bool f = 0;
while(!Q.empty())
{
p = Q.front() ; Q.pop();
if(p == q)
{
f = 1;
break;
}
Node now;
now.time = p.time + 1;
for(int k=0 ; k<6 ; k++)
{
now.x = p.x + dx[k], now.y = p.y + dy[k], now.z = p.z + dz[k];
if(b[now.z][now.x][now.y])
{
Q.push(now);
b[now.z][now.x][now.y] = 0;
}
}
}
if(f == 1)
cout << "Escaped in " << p.time << " minute(s)." << endl;
else
cout << "Trapped!" << endl;
}
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: