hdu1240/poj2225 BFS广搜的再理解
版权声明:本文为博主原创文章,未经博主同意不得转载。
https://blog.csdn.net/guodongxiaren/article/details/37756347
原题地址
pid=1240" rel="nofollow">HDUOJ
题目介绍
题意
这相同是一道搜索题,所不同的是要搜索的图是三维的而不是二维的。但这并没什么大的改变。仅仅是添加了两个搜索的方向而已。
陷阱
要注意的地方是,所给出的起点终点的坐标是依照 列,行,层的顺序。
关于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广搜的再理解的更多相关文章
- hdu 1180:诡异的楼梯(BFS广搜)
诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Subm ...
- hdu 1242:Rescue(BFS广搜 + 优先队列)
Rescue Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submis ...
- hdu 1195:Open the Lock(暴力BFS广搜)
Open the Lock Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- BFS广搜题目(转载)
BFS广搜题目有时间一个个做下来 2009-12-29 15:09 1574人阅读 评论(1) 收藏 举报 图形graphc优化存储游戏 有时间要去做做这些题目,所以从他人空间copy过来了,谢谢那位 ...
- 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 ...
- hdu 2717:Catch That Cow(bfs广搜,经典题,一维数组搜索)
Catch That Cow Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- hdu 2612:Find a way(经典BFS广搜题)
Find a way Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- Catch That Cow(BFS广搜)
Description Farmer John has been informed of the location of a fugitive cow and wants to catch her i ...
- POJ3984 BFS广搜--入门题
迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20816 Accepted: 12193 Descriptio ...
随机推荐
- Java并发之volatile二
使用volatilekeyword的场景 Volatile 变量具有 synchronized 的可见性特性.可是不具备原子特性.这就是说线程可以自己主动发现 volatile 变量的最新值.Vola ...
- 将本地代码上传github
建立本地仓库 1.首先进入text文件夹 cd d:text 首先进入text文件夹 2.执行指令:git init 执行git init 初始化成功后你会发现项目里多了一个隐藏文件夹.git 隐藏的 ...
- JAVA WEB -- request
request request.getContextPath() 返回站点的根目录 request.getRealpath("/")得到的是实际的物理路径,也就是你的项目所在服务 ...
- [C] 在 C 语言编程中实现动态数组对象
对于习惯使用高级语言编程的人来说,使用 C 语言编程最头痛的问题之一就是在使用数组需要事先确定数组长度. C 语言本身不提供动态数组这种数据结构,本文将演示如何在 C 语言编程中实现一种对象来作为动态 ...
- UILabel(富文本)
本文转载至 http://www.jianshu.com/p/5d24d22f99c3 富文本 NSString *str = @"人生若只如初见,何事秋风悲画扇.\n等闲变却故人心,却道故 ...
- 服务器虚拟化ESXi 5.5安装过程
研究服务器虚拟化实践小结: 实验服务器硬件: 主板 华硕P8B-C/2L CPU Intel Xeon E3-1230 V2 3.3GHz RAM 8G ECC 1600MHz 硬盘 2T 2块 软件 ...
- 7.16顺便贴一下 pep8的标准
PEP8 Python 编码规范 一 代码编排 1 缩进.4个空格的缩进(编辑器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格. 2 每行最大长度79,换行可以使用反斜杠,最好使用圆括号 ...
- Linux CentOS中防火墙的关闭及开启端口
注:CentOS7之前用来管理防火墙的工具是iptable,7之后使用的是Firewall 样例:在CentOS7上安装tomcat后,在linux本机上可以访问tomcat主页,http://ip: ...
- freemarker 中可以直接使用的内置对象
freemarker 中可以直接使用的内置对象 需要配置一下:springboot中配置 ## Freemarker \u914D\u7F6E ## \u6587\u4EF6\u914D\u7F6E\ ...
- cuteftp9破解及安装、使用
一.破解: 参考:https://jingyan.baidu.com/article/ca00d56c4e43b2e99febcf70.html 1. 首先下载cuteftp替换文件及cuteftp9 ...