版权声明:本文为博主原创文章,未经博主同意不得转载。

https://blog.csdn.net/guodongxiaren/article/details/37756347

原题地址

pid=1240" rel="nofollow">HDUOJ

POJ

题目介绍

题意

这相同是一道搜索题,所不同的是要搜索的图是三维的而不是二维的。但这并没什么大的改变。仅仅是添加了两个搜索的方向而已。

陷阱

要注意的地方是,所给出的起点终点的坐标是依照 列,行,层的顺序。

关于BFS

与DFS不同,BFS能保证所搜到的路径一定是最短路径,所以我们不须要维护一个多维(此处为3维)数组来记录訪问到每一点的最小步数,仅仅须要维护一个多维数组来标记是否走过就能够了。DFS中是要不停回溯来找最短路径的。可是BFS是不须要的。这是BFS本身的性质所决定的,BFS能保证第一次搜索到某一点时所走的路径就是到该点的最短路径。

以后假设还能再走到该点,那么所走的路径一定是大于等于第一次搜索到的路径的。

所以,BFS是不须要回溯的。(自己之前也有误解。。

囧)

代码

#include<iostream>
#include<queue>
using namespace std;
#include<cstdio>
#include<cstring>
#define INF 0x3f3f3f3f
struct node
{
int x,y,z;
int level;
node(int i,int j,int k,int l):x(i),y(j),z(k),level(l){};
void set(int i,int j,int k,int l)
{
x=i;
y=j;
z=k;
level=l;
}
};
int d[6][3]={0,1,0,0,-1,0,1,0,0,-1,0,0,0,0,1,0,0,-1};
char m[10][10][10];
bool used[10][10][10];
int s[3],e[3];
int n,step;
queue<node> q;
void bfs(int x,int y,int z)
{
int i,j,k,l;
node pos(x,y,z,0);
q.push(pos);
used[x][y][z]=1;
while(!q.empty())
{
pos = q.front();
i = pos.x;
j = pos.y;
k = pos.z;
l = pos.level;
q.pop();
if(i==e[2]&&j==e[1]&&k==e[0])
{
if(l<step)
step=l;
continue;
}
for(int t=0;t<6;t++)
{
x=i+d[t][0];
y=j+d[t][1];
z=k+d[t][2];
if(x<0||x>=n||y<0||y>=n||z<0||z>=n||m[x][y][z]!='O'||used[x][y][z])
continue;
pos.set(x,y,z,l+1);
used[x][y][z]=1;
q.push(pos);
}
}
}
int main()
{
char str[6];
while(cin>>str>>n)
{
memset(used,0,sizeof used);
step = INF;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
for(int k=0;k<n;k++)
cin>>m[i][j][k];
cin>>s[0]>>s[1]>>s[2]>>e[0]>>e[1]>>e[2];
cin>>str;
bfs(s[2],s[1],s[0]);
if(step!=INF)
cout<<n<<" "<<step<<endl;
else
cout<<"NO ROUTE"<<endl;
}
}

used数组表示是否走过。1为走过。0为没有走过。

hdu1240/poj2225 BFS广搜的再理解的更多相关文章

  1. hdu 1180:诡异的楼梯(BFS广搜)

    诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Subm ...

  2. hdu 1242:Rescue(BFS广搜 + 优先队列)

    Rescue Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submis ...

  3. hdu 1195:Open the Lock(暴力BFS广搜)

    Open the Lock Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  4. BFS广搜题目(转载)

    BFS广搜题目有时间一个个做下来 2009-12-29 15:09 1574人阅读 评论(1) 收藏 举报 图形graphc优化存储游戏 有时间要去做做这些题目,所以从他人空间copy过来了,谢谢那位 ...

  5. hdu 1026:Ignatius and the Princess I(优先队列 + bfs广搜。ps:广搜AC,深搜超时,求助攻!)

    Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  6. hdu 2717:Catch That Cow(bfs广搜,经典题,一维数组搜索)

    Catch That Cow Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  7. hdu 2612:Find a way(经典BFS广搜题)

    Find a way Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  8. Catch That Cow(BFS广搜)

    Description Farmer John has been informed of the location of a fugitive cow and wants to catch her i ...

  9. POJ3984 BFS广搜--入门题

    迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 20816   Accepted: 12193 Descriptio ...

随机推荐

  1. Spark学习笔记——Spark上数据的获取、处理和准备

    数据获得的方式多种多样,常用的公开数据集包括: 1.UCL机器学习知识库:包括近300个不同大小和类型的数据集,可用于分类.回归.聚类和推荐系统任务.数据集列表位于:http://archive.ic ...

  2. How to set asp.net Identity cookies expires time

    If IsPersistent property of AuthenticationProperties is set to false, then the cookie expiration tim ...

  3. jxl和POI的区别

    最近两个项目中分别用到jxl和POI,因为用的都是其中的简单的功能,所以没有觉得这其中有太大的区别.有人针对他们做了比较,这里也拿出来展示一下. 首先从优缺点上来说 一.jxl 优点: Jxl对中文支 ...

  4. jdk 自带的数据库Derby使用

    ij是derby自带的一个功能强大的数据库管理工具,可以进行很多数据库管理的操作,包括创建数据库, 启动/关闭数据库,执行SQL脚本等.完成准备工作后,就可以启动并使用ij工具了. 在cmd中输入如下 ...

  5. 【代码审计】YUNUCMS_v1.0.6 前台反射型XSS跨站脚本漏洞分析

      0x00 环境准备 QYKCMS官网:http://www.yunucms.com 网站源码版本:YUNUCMSv1.0.6 程序源码下载:http://www.yunucms.com/Downl ...

  6. elastaicsearch基础----->elastaicsearch的使用(一)

    这里面我们总结一下es的一些基础使用. es的基础用法 一.es索引的创建 在postman中,请求url地址:192.168.1.112:9200/user.请求方式:PUT.请求内容如下: { & ...

  7. Qt编写调试日志输出类带网络转发(开源)

    用qt开发商业程序已经九年了,陆陆续续开发过至少几十个程序,除了一些算不算项目的小工具外,大部分的程序都需要有个日志的输出功能,希望可以将程序的运行状态存储到文本文件或者数据库或者做其他处理等,qt对 ...

  8. java工具类 获取包下所有类

    extends:http://blog.csdn.net/jdzms23/article/details/17550119 package com.threeti.util; import java. ...

  9. Linux之vmware安装

    环境准备  mac            用     vmware  fusion                      虚拟机            和  iterm2      远程连接工具, ...

  10. Java基础语法<八> 继承 多态 抽象 反射

    1.超类和子类 超类和子类 父类与子类 多态: 一个对象变量可以指示多种实际类型的现象称为多态 一个变量可以引用父类对象,也可以引用其子类对象,这就是多态. 不能将一个超类的引用赋给子类变量,因为调用 ...