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

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. Map字符串类型去掉空格处理

     Iterator it = data.keySet().iterator(); for (; it.hasNext();) { if( data.get(key) instanceof  Strin ...

  2. MTK 修改默认时区

    首先介绍应用程序修改 : AlarmManager mAlarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); mA ...

  3. SpringBoot------Servlet3.0的注解自定义原生Servlet

    1.添加需要使用的依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://w ...

  4. 8 -- 深入使用Spring -- 6...1 Spring支持的事务策略

    8.6.1 Spring支持的事务策略 JTA.JDBC.Hibernate Java EE应用的传统事务有两种策略:全局事务和局部事务.全局事务由应用服务器管理,需要底层服务器的JTA(Java T ...

  5. CentOS 6.7 下 Squid 代理服务器 的 安装与配置

    GFW 封锁了 HTTP/Socks5 代理,HTTP 代理是关键词过滤,Socks5 代理则是封锁协议.不过某些特殊的低端口并没有这么处理,已知的有 21,25. 20端口已经被封杀,21端口目前会 ...

  6. Javascript阿拉伯数字转中文

    Javascript阿拉伯数字转中文 template.helper('_toChinese', function (number) { /* * 单位 */ var units = '个十百千万@# ...

  7. Oracle数据库入门——体系结构

    1.oracle内存由SGA+PGA所构成 2.oracle数据库体系结构数据库的体系结构是指数据库的组成.工作过程与原理,以及数据在数据库中的组织与管理机制. oracle工作原理: 1).在数据库 ...

  8. onems设备管理系统(TR-069和OMA)

    onems设备管理系统(TR-069和OMA) 沃克斯科技OneMS设备管理套件是一个全面的为服务提供商和企业提供自动配置和远程管理功能的设备管理解决方案.它利用现有的网络基础设施来自动化订购,预配置 ...

  9. C - Monthly Expense

    Farmer John is an astounding accounting wizard and has realized he might run out of money to run the ...

  10. lxml基础

    节点操作: from lxml import etree # 1.创建Element对象,参数即节点名称 root = etree.Element('root') print(root) # < ...