对于3维的,可以用结构体来储存,详细见下列代码。

样例可以过,不过能不能ac还不知道,疑似poj炸了,

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int INF = 0x3f3f3f3f;
int dx[] = {1, -1, 0, 0, 0, 0};
int dy[] = {0, 0, -1, 1, 0, 0};
int dz[] = {0, 0, 0, 0, 1, -1};
int bx, by, bz;
int ex, ey, ez;
const int maxn = 30 + 5;
class POS
{
public:
POS():x_(-1), y_(-1), z_(-1){ }
POS(int x, int y, int z):x_(x), y_(y), z_(z){ }
int getX(){ return x_;}
int getY(){ return y_;}
int getZ(){ return z_;}
private:
int x_, y_, z_;
};
typedef POS P;
struct Level
{
char maze[maxn][maxn];
int vis[maxn][maxn];
int d[maxn][maxn];
};
int L, R, C;
Level *h;
bool op(int x, int y, int z)
{
if(x >= 0 && x < R && y >= 0 && y < C && z >= 0 && z < L)
return true;
return false;
}
int bfs()
{
queue<P> pos;
pos.push(P(bx, by, bz));
while(!pos.empty())
{
P p = pos.front();
pos.pop();
if(p.getX() == ex && p.getY() == ey && p.getZ() == ez)
break;
h[p.getZ()].vis[p.getX()][p.getY()] = 1;
for(int i = 0; i < 6; i++)
{
int curx = p.getX() + dx[i], cury = p.getY() + dy[i], curz = p.getZ() + dz[i];
if(op(curx, cury, curz) && h[curz].maze[curx][cury] != '#' && !h[curz].vis[curx][cury])
{
h[curz].vis[curx][cury] = 1;
pos.push(P(curx, cury, curz));
h[curz].d[curx][cury] = h[p.getZ()].d[p.getX()][p.getY()] + 1;
}
} }
return h[ez].d[ex][ey]; }
int main()
{
while(cin >> L >> R >> C && (L || R || C))
{
bx = by = bz = -1;
ex = ey = ez = -1;
h = new Level[L];
for(int i = 0; i < L; i++)
{
for(int j = 0; j < R; j++)
{
scanf("%s", h[i].maze[j]); //input
for(int k = 0; k < C ; k++)
{
h[i].vis[j][k] = 0;
if(h[i].maze[j][k] == 'S')
{
h[i].d[j][k] = 0;
bx = j;
by = k;
bz = i;
}
else
h[i].d[j][k] = INF;
if(h[i].maze[j][k] == 'E')
{
ex = j;
ey = k;
ez = i;
}
} } }
int ans = bfs();
if(ans == INF)
cout << "Trapped!" << endl;
else
cout << "Escaped in " << ans << " minute(s)." << endl; delete []h; } }

Dungeon Master POJ - 2251(bfs)的更多相关文章

  1. Dungeon Master poj 2251 dfs

    Language: Default Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16855 ...

  2. Dungeon Master POJ - 2251 (搜索)

    Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 48605   Accepted: 18339 ...

  3. (广搜)Dungeon Master -- poj -- 2251

    链接: http://poj.org/problem?id=2251 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2137 ...

  4. Dungeon Master POJ - 2251 [kuangbin带你飞]专题一 简单搜索

    You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of un ...

  5. B - Dungeon Master POJ - 2251

    //纯bfs #include <iostream> #include <algorithm> #include <cstring> #include <cs ...

  6. kuangbin专题 专题一 简单搜索 Dungeon Master POJ - 2251

    题目链接:https://vjudge.net/problem/POJ-2251 题意:简单的三维地图 思路:直接上代码... #include <iostream> #include & ...

  7. POJ.2251 Dungeon Master (三维BFS)

    POJ.2251 Dungeon Master (三维BFS) 题意分析 你被困在一个3D地牢中且继续寻找最短路径逃生.地牢由立方体单位构成,立方体中不定会充满岩石.向上下前后左右移动一个单位需要一分 ...

  8. POJ 2251 Dungeon Master【三维BFS模板】

    Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 45743 Accepted: 17256 Desc ...

  9. poj 2251 Dungeon Master 3维bfs(水水)

    Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 21230   Accepted: 8261 D ...

随机推荐

  1. gcc和MinGW的异同(在cygwin/gcc做的东西可以无缝的用在linux下,没有任何问题,是在windows下开发linux程序的一个很好的选择)

    cygwin/gcc和MinGW都是gcc在windows下的编译环境,但是它们有什么区别,在实际工作中如何选择这两种编译器. cygwin/gcc完全可以和在linux下的gcc化做等号,这个可以从 ...

  2. Jenkins build失败条件

    在Jenkins 项目写了很多剧本.有时候,我发现脚本失败,但Jenkins运行成功. Jenkins无论是通过退出代码0比量build成功. 因此,newLISP在.您可以使用(exit)对于成功. ...

  3. Single Application

    如果限制一个程序同时只能启动一个实例,有几个可以使用的库 QtSingleApplication 以前可以免费使用,后来只有商业版能里能用,在 Github 上也有一个 LGPL 协议的实现,地址为h ...

  4. 关于 Swift 中的 Array.contains 方法

    Swift 2.0 中对语言进行了又一次的改进,这次将整个语言变得更加面向对象化,比如在 Swift 1.x 中如果要判断某个元素是否在数组中,就需要用到 contains 函数: if contai ...

  5. v-charts显示标题

    使用v-charts的时候,如果要显示标题需要以下操作 1. 加入:title props <ve-pie :title="chartTitle" :data="c ...

  6. Qt 制作透明背景图片与裁剪图片(很实用)

    这两天想做一个五子棋游戏,想从零开始自己绘制各种图片素材,将经验心得整理如下. 制作透明背景图片: void MyPainter::DrawKit() { QImage image(30, 30, Q ...

  7. 在 Laravel 中通过 Artisan View 扩展包创建及删除应用视图文件

    1.简介 本扩展包添加了两个视图相关的Artisan命令到Laravel应用,以便我们通过Artisan命令即可创建和管理视图文件,可谓是进一步解放了生产力. 2.安装 还是通过Composer安装: ...

  8. vmstat命令浅析

    vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况.这个命令是我查看Linux/Unix最 ...

  9. C#跳转语句

    1.break 退出直接封闭它的switch.while.do.for或foreach语句. 当有嵌套时,break只退出最里层的语句块. break不能跳出finally语句块. 2.continu ...

  10. Anbox —— 在 Linux 系统中运行 Android 应用

    具有以下特性: 没有限制:由于 Anbox 运行着整个 Android 系统,所以理论上任何应用都可以在其中运行 安全:Anbox 将 Android APP 放进一个密封的盒子中,无需直接访问硬件或 ...