对于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. 一张图弄明白开源协议-GPL、BSD、MIT、Mozilla、Apache和LGPL 之间的区别

    导读 在开源软件中经常看到各种协议说明,GPL.BSD.MIT.Mozilla.Apache和LGPL. - 这些协议之间的有什么区别 - 如何选择合适的开源协议 请看下文,特作记录一篇,以供后续查看 ...

  2. OpenGL(五) 三维变换之模型视图矩阵

    计算机三维图形学中,一个基本的任务是如何描述三维空间中一个物体位置的变化,也就是如何 描述物体的运动.通常情况下,物体位置的变化包含三个基本的变化:平移.旋转和缩放,物体的运动也可以用这三个基本的运动 ...

  3. User-Agent 列表

    <useragentswitcher> <folder description="Internet Explorer"> <useragent des ...

  4. Get and Post(Unity3D六个发展)

    猴子原创,欢迎转载. 转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=565 unity3d中的www ...

  5. linux 下添加 路由

    # yum install -y pptp pptp-setup 从 http://ip.line668.com/ip.php 看ip列表,找国外的ip.  # pptpsetup --create ...

  6. vagrant up 无法加载映像目录

    错误代码显示: ==> default: Attempting graceful shutdown of VM... ==> default: Clearing any previousl ...

  7. List集合去重方式及效率对比

    List集合相信大家在开发过程中几乎都会用到.有时候难免会遇到集合里的数据是重复的,需要进行去除.然而,去重方式有好几种方式,你用的是哪种方式呢?去重方式效率是否是最高效.最优的呢?今天就给大家讲解一 ...

  8. css的双飞翼布局

    双飞翼布局的大概意思就是左右两边的内容是固定的,大小是固定的, 而中间的布局的随着页面的大小变化而自动变化的. 通过代码来解析: 1.四个div,也可以使用section,其中main,left.ri ...

  9. 教你如何快速使用Github

    以前看过几篇github的使用教程,感觉还是不是很清晰,自从看到了这篇,通俗易懂,也学会基本的使用了,在此为大家推荐.(转自知乎,为了能让更多的人看到,请允许我使用 “原创”,如果侵权请联系.) Gi ...

  10. 为什么需要使用Git客户端?(使用msysgit)

    Git 是 Linux Torvalds 为了帮助管理 Linux® 内核开发而开发的一个开放源码的版本控制软件.正如所提供的文档中说的一样,“Git 是一个快速.可扩展的分布式版本控制系统,它具有极 ...