题意:给你一个三维地图,然后让你走出去,找到最短路径。

思路:bfs

  1. 每个坐标的表示为 x,y,z并且每个点都需要加上时间 t

    struct node
    {
    int x, y, z;
    int t;
    };

  2. bfs用队列,进队列的时候要标记,并且 t+1;
  3. 最先到达终点的,所花的时间必定最短

代码上的小技巧:
三维地图需要你去遍历的时候需要走六个方向:

int dx[] = { ,,,,,- };
int dy[] = { ,,-,,, };
int dz[] = { ,-,,,, };

解决问题的代码:

#include <cstdio>
#include <iostream>
#include <queue>
#include <algorithm>
#include <cstring>
using namespace std;
int r, n, m;
string s[][];
struct node
{
int x, y, z;
int t;
};
node Begin, End;
queue <node> que;
int dx[] = { ,,,,,- };
int dy[] = { ,,-,,, };
int dz[] = { ,-,,,, };
int vis[][][];
int bfs()
{
que.push(Begin);
vis[Begin.x][Begin.y][Begin.z] = ;
while (!que.empty())
{
node front = que.front();
que.pop();
if (front.x == End.x && front.y == End.y && front.z == End.z) return front.t;
for (int i = ; i < ; i++)
{
node tmp;
tmp.x = front.x + dx[i];
tmp.y = front.y + dy[i];
tmp.z = front.z + dz[i];
tmp.t = front.t + ;
if (tmp.x >= && tmp.x < r && tmp.y >= && tmp.y < n && tmp.z >= && tmp.z < m && !vis[tmp.x][tmp.y][tmp.z] && s[tmp.x][tmp.y][tmp.z] != '#')
{
que.push(tmp);
vis[tmp.x][tmp.y][tmp.z] = ;
}
}
}
return -;
}
int main()
{
while (cin >> r >> n >> m)
{
if (r == && n == && m == ) break;
memset(vis, , sizeof(vis));
while (!que.empty())
{
que.pop();
}
for (int i = ; i < r; i++) {
string ret;
for (int j = ; j < n; j++) {
cin >> s[i][j];
for (int k = ; k < m; k++) {
if (s[i][j][k] == 'S') {
Begin.x = i, Begin.y = j, Begin.z = k; Begin.t = ;
}
else if (s[i][j][k] == 'E') {
End.x = i, End.y = j, End.z = k; End.t = ;
}
}
}
}
int ans = bfs();
if (ans == -) {
printf("Trapped!\n");
}
else {
printf("Escaped in %d minute(s).\n", ans);
}
} return ;
}

poj 2251 三维地图最短路径问题 bfs算法的更多相关文章

  1. 【POJ 2251】Dungeon Master(bfs)

    BUPT2017 wintertraining(16) #5 B POJ - 2251 题意 3维的地图,求从S到E的最短路径长度 题解 bfs 代码 #include <cstdio> ...

  2. POJ 2251 三维BFS(基础题)

    Dungeon Master Description You are trapped in a 3D dungeon and need to find the quickest way out! Th ...

  3. 【POJ - 2251】Dungeon Master (bfs+优先队列)

    Dungeon Master  Descriptions: You are trapped in a 3D dungeon and need to find the quickest way out! ...

  4. POJ 2251 Dungeon Master(三维空间bfs)

    题意:三维空间求最短路,可前后左右上下移动. 分析:开三维数组即可. #include<cstdio> #include<cstring> #include<queue& ...

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

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

  6. poj 3669 火星撞地球问题 bfs算法

    题意:火星撞地球,你要跑到一个永远安全的地方,求最短时间 思路:bfs+预处理 这题的数据量比较大,所以需要进行预处理 对每个位置设上时间(被撞的最早时间) 未被撞的设为-1 for (int j = ...

  7. POJ 2251 Dungeon Master --- 三维BFS(用BFS求最短路)

    POJ 2251 题目大意: 给出一三维空间的地牢,要求求出由字符'S'到字符'E'的最短路径,移动方向可以是上,下,左,右,前,后,六个方向,每移动一次就耗费一分钟,要求输出最快的走出时间.不同L层 ...

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

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

  9. POJ - 2251 Dungeon Master 【BFS】

    题目链接 http://poj.org/problem?id=2251 题意 给出一个三维地图 给出一个起点 和 一个终点 '#' 表示 墙 走不通 '.' 表示 路 可以走通 求 从起点到终点的 最 ...

随机推荐

  1. PT100/PT1000

    热敏电阻:互换性差,非线性严重,测量范围窄-50~300℃. 金属电阻:准备稳定可靠.-200~500℃ PT100:测量范围宽比PT1000宽,分辨率比PT1000低(100倍,即PT1000每变化 ...

  2. 仙人掌(cactus)

    题目描述LYK 在冲刺清华集训(THUSC)!于是它开始研究仙人掌,它想来和你一起分享它最近研究的结果.如果在一个无向连通图中任意一条边至多属于一个简单环(简单环的定义为每个点至多经过一次),且不存 ...

  3. c#基础_ArrayList

    list.AddRange(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }); //list.AddRange(list); //list.Clear();清空所有元素 ...

  4. Java面向对象(构造方法、this、super)

    面向对象 今日内容介绍 u 构造方法 u this u super 第1章 构造方法 我们对封装已经有了基本的了解,接下来我们来看一个新的问题,依然以Person为例,由于Person中的属性都被pr ...

  5. dao层写展示自己需要注意的问题

    写dao层时一定要把 News news=new News(); 写在while循环内,是每循环一次,new出一个对象

  6. html5 新增表单控件和表单属性

    新的输入型控件 email:电子邮箱文本框,跟普通的没什么区别 当输入不是邮箱的时候,验证通不过 移动端的键盘会有变化         tel:电话号码 一般用于手机端,是一个键盘切换 url:网页的 ...

  7. edittext 设置不自动获取焦点

    给父级控件 设置两个属性,可以把焦点抢夺过去,最好是没有任何事件的父级控件(本人比较喜欢在xml文件的跟布局设置,因为页面的跟布局一般情况下,是不会设置任何事件的) android:focusable ...

  8. selenium+python之自动换测试用例执行

    1.一个用例为一个完整的场景,从用户登陆系统到最终退出并关闭浏览器. 2.一个用例只验证一个功能点,不要试图在用户登陆系统后把所有的功能都验证一遍. 3.尽可能少的编写逆向逻辑用例.一方面因为逆向逻辑 ...

  9. python基础教程总结9——模块,包,标准库

    1. 模块 在python中一个文件可以被看成一个独立模块,而包对应着文件夹,模块把python代码分成一些有组织的代码段,通过导入的方式实现代码重用. 1.1 模块搜索路径 导入模块时,是按照sys ...

  10. 如何在Netweaver SE16里直接查看某数据库行记录

    有的数据库表字段类型为RAWSTRING, 包含的是XML的二进制内容,无法直接在SE16里显示. 如果确实想看其内容,怎么办?在下面SE16页面的命令提示栏输入命令/h, 回车进入调试模式.然后双击 ...