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

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. js操作DOM在父元素中的结尾添加子节点注意

    impressionHtml=`<img src=${value} alt=""/>`; document.getElementById("wrapper&q ...

  2. (转) at&T语法格式 与 at&T - intel格式对比

    原地址 示例: movl (%ebp), %eax, 等同于Intel格式中的 ] ,AT&T中,源操作数在左,目的操作数在右.“l”是Longword,相当于Intel格式中的dword p ...

  3. 05原型模式Prototype

    一.什么是原型模式 Prototype模式是一种对象创建型模式,它采 取复制原型对象的方法来创建对象的实例.使用 Prototype模式创建的实例,具有与原型一样的 数据. 二.原型模式的特点 1. ...

  4. Hadoop -- ES -- CURD

    1.获取ES连接 package com.ciic.history.common; import org.elasticsearch.client.transport.TransportClient; ...

  5. win7 cmd终端连接android手机运行adb shell脚本命令

    win7 cmd终端连接android手机运行adb shell脚本命令 (2013-03-22 20:13:57) 转载▼ 标签: android it shell 连接 linux 分类: 嵌入式 ...

  6. [Linux] 在 Linux CLI 使用 ssh-keygen 生成 RSA 密钥

    RSA 是一种公钥加密算法,在 1977 年由麻省理工学院的 Ron Rivest, Adi Shamir, Leonard Adleman 三人一起提出,因此该算法命名以三人姓氏首字母组合而成. S ...

  7. 【JAVA-JDT-AST】Java抽象语法树的构建、遍历及转成dot格式(附Github源码)

    Background: 最近为了重现tree-based clone detection的论文:L. Jiang, G. Misherghi, Z. Su, and S. Glondu. Deckar ...

  8. 轮滑基础(一)(前摔,葫芦步,推步,A字转弯,弓步转弯)

    轮滑新手入门推荐? [柚子陪你学轮滑轮滑教学]第一集 轮滑安全 1,站: 站立:脚可以成v字,或者平行,手放膝盖或者前伸.平行站立 膝盖相距一拳头左右,两腿间距略小于肩宽.膝盖略弯,腰下压,抬头挺胸 ...

  9. hashlib模块configparser模块logging模块

    hashlib模块 算法介绍 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长 ...

  10. java内存溢出总结(1.8)

    堆溢出 原因:老年代没有足够的空间存放即将进入老年代对象(或者没有连续的空间存下某个大对象),1.多次gc没有回收的对象 2. ygc后,s区满了,多余的对象直接进入老年代,3.大对象直接进入老年代 ...