三维BFS Poj 2251
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <set>
#include <iomanip> using namespace std;
#define maxn 205 int d[][]={{,,},{-,,},{,,},{,-,},{,,},{,,-}};
typedef struct point
{
int x,y,z;
int ans;
}point; point p[maxn];
int Map[][][];
bool used[maxn][maxn][maxn]; int x1,x2,y2,z1,z2;
int you;//这里原本是想用y1的,但是在cmath这个函数中y1(y0,yn等)有自己的定义,发生了冲突(如果将cmath删掉,就可以定义了)
int BFS(int l,int n,int m)
{
int ii,jj,zz;
int i;
queue<point>q;
point temp1,temp2;
temp1.x=x1;
temp1.y=you;
temp1.z=z1;
temp1.ans=;
q.push(temp1);
memset(used, false, sizeof(used));
used[z1][x1][you]=true;
while(!q.empty()){
temp1=q.front();
q.pop();
for(i=;i<;i++)
{
ii=temp1.x+d[i][];
jj=temp1.y+d[i][];
zz=temp1.z+d[i][];
if(ii==x2 && jj==y2 && zz==z2)
{
return temp1.ans+;
}
if(zz>= && zz<l && ii>= && ii<n && jj>= && jj<m && Map[zz][ii][jj]== && used[zz][ii][jj]==false)
{
used[zz][ii][jj]=true;
temp2.x=ii;
temp2.y=jj;
temp2.z=zz;
temp2.ans=temp1.ans+;
q.push(temp2);
}
}
}
return -;
}
int main()
{
int l,m,n,i,j,k,key;
char str[];
while(cin>>l>>n>>m){
if(l==&&n==&&m==){
break;
}
memset(Map, , sizeof(Map));
for(k=;k<l;k++){
for(i=;i<n;i++){
scanf("%s",str);
for(j=;j<m;j++){
if(str[j]=='#')
Map[k][i][j]=;
else if(str[j]=='.')
{
Map[k][i][j]=;
}
else if(str[j]=='S')
{
z1=k;
x1=i;
you=j;
}
else
{
z2=k;
x2=i;
y2=j;
}
}
}
}
key=BFS(l,n,m);
if(key==-)
cout<<"Trapped!"<<endl;
else
printf("Escaped in %d minute(s).\n",key);
}
return ;
}
三维BFS Poj 2251的更多相关文章
- BFS POJ 2251 Dungeon Master
题目传送门 /* BFS:这题很有意思,像是地下城,图是立体的,可以从上张图到下一张图的对应位置,那么也就是三维搜索,多了z坐标轴 */ #include <cstdio> #includ ...
- POJ 2251 Dungeon Master --- 三维BFS(用BFS求最短路)
POJ 2251 题目大意: 给出一三维空间的地牢,要求求出由字符'S'到字符'E'的最短路径,移动方向可以是上,下,左,右,前,后,六个方向,每移动一次就耗费一分钟,要求输出最快的走出时间.不同L层 ...
- POJ.2251 Dungeon Master (三维BFS)
POJ.2251 Dungeon Master (三维BFS) 题意分析 你被困在一个3D地牢中且继续寻找最短路径逃生.地牢由立方体单位构成,立方体中不定会充满岩石.向上下前后左右移动一个单位需要一分 ...
- 【BFS】POJ 2251
POJ 2251 Dungeon Master 题意:有一个地图,三维,走的方向是上下,左右,前后.问你最小步数从起始点走到出口. 思路:三维的BFS,就是多加一组状态,需要细心(不细心如我就找了半个 ...
- poj 2251 Dungeon Master( bfs )
题目:http://poj.org/problem?id=2251 简单三维 bfs不解释, 1A, 上代码 #include <iostream> #include<cst ...
- 【POJ 2251】Dungeon Master(bfs)
BUPT2017 wintertraining(16) #5 B POJ - 2251 题意 3维的地图,求从S到E的最短路径长度 题解 bfs 代码 #include <cstdio> ...
- POJ 2049— Finding Nemo(三维BFS)10/200
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u013497151/article/details/29562915 海底总动员.... 这个题開始 ...
- POJ 2251 Dungeon Master(地牢大师)
p.MsoNormal { margin-bottom: 10.0000pt; font-family: Tahoma; font-size: 11.0000pt } h1 { margin-top: ...
- POJ 2251 Dungeon Master /UVA 532 Dungeon Master / ZOJ 1940 Dungeon Master(广度优先搜索)
POJ 2251 Dungeon Master /UVA 532 Dungeon Master / ZOJ 1940 Dungeon Master(广度优先搜索) Description You ar ...
随机推荐
- 侧方位停车想一次过,掌握边线30cm很重要!
侧方位停车要想一次过关,关键在于保持车身距离库边线30cm左右的距离.但是,往往有很多学员掌控不好这个距离,导致倒库时压线.那么,如何找准这个30cm呢?下面,小编就来教大家方法,赶紧学习吧! 侧方位 ...
- 深入攻克c语言--day04
1.将包含字符数字的字符串分开,使得分开后的字符串前一部分是数字后一部分是字母.例 如“h1ell2o3” ->”123hello” #include<stdio.h> #inclu ...
- shell函数(调用、返回值,返回值获取)
Shell函数返回值,常用的两种方式:return,echo 1) return 语句shell函数的返回值,可以和其他语言的返回值一样,通过return语句返回.示例1: [devadmin@swa ...
- C# HTML解析工具HtmlAgilityPack使用实例(一)
一.生成HTML字符串 //生成DOM字符串结构 HtmlNode container = HtmlNode.CreateNode("<div />"); HtmlNo ...
- 【原】Oracle 11.2.0.1 64bit for RHEL6.0 Server x86_64 静默安装
作者:david_zhang@sh [转载时请以超链接形式标明文章] 链接:http://www.cnblogs.com/david-zhang-index/p/4182469.html 本文适用Or ...
- win8安装iis
win8下面安装iis跟win7一样,需要通过启用和关闭windouws功能来安装iis,具体要选哪些项,请看图: 如果要使用wcf服务,你还需要勾选以下项:
- A - Toy Cars
Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Description Little ...
- 1.25-1.26 Coordinator数据集和oozie bundle
一.Coordinator数据集 二.oozie bundle
- python读写mysql总结
一.MySQLdb包的安装 1. 在win环境下,下载MySQL-python-1.2.3,有两种方式: (1) 下载src源码.tar.gz(这个源码需要build编译再安装.egg包(当于.jar ...
- 【eclipse插件开发实战】Eclipse插件开发2——SWT
Eclipse插件开发实战2--SWT 一.SWT简介 SWT(StandardWidget Toolkit) 标准小窗口工具箱,一开源的GUI编程框架,与AWT/Swing有相似的用处,eclips ...