题意:

在n×m的地图上,0表示墙,1表示空地,2表示人,3表示目的地,4表示有定时炸弹重启器。定时炸弹的时间是6,人走一步所需要的时间是1。每次可以上、下、左、右移动一格。当人走到4时如果炸弹的时间不是0,可以重新设定炸弹的时间为6。如果人走到3而炸弹的时间不为0时,成功走出。求人从2走到3的最短时间。这个题中每个结点都是可以重复访问的,但其实,炸弹重置点不要重复走,因为,走到炸弹重置点时时间就会被设置为最大时间,当重新返回时时间又设成最大,但此时已走的步数肯定增加了,所以如果存在较优解的话那么肯定在第一次到这点后就可以找到较优解,这也是代码中剪枝的原理,只是将这种思想扩展到普通点而已,所以采用记忆化搜。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue> using namespace std; const int MAX=10; typedef struct point //每个单元信息
{
int x,y; //坐标
int step; //走到这里的步数
int time; //还剩多少时间
}Point; Point cur,nxt; int mmap[MAX][MAX];
int n,m;
int si,sj;
int dx[]={-1,1,0,0}; //方向
int dy[]={0,0,-1,1}; void bfs() //广搜
{
queue<Point> q;
cur.time=6;
cur.step=0;
cur.x=si;
cur.y=sj;
q.push(cur); //把起点压入队列中
while(!q.empty())
{
cur=q.front();
q.pop();
for(int i=0;i<4;i++) //四个方向搜索
{
nxt.x=cur.x+dx[i];
nxt.y=cur.y+dy[i];
nxt.time=cur.time-1; //时间-1
nxt.step=cur.step+1; //步数+1
if(nxt.x<0||nxt.x>=n||nxt.y<0||nxt.y>=m) continue; //如果当前点的坐标超出迷宫范围 直接下一个方向搜索
if(mmap[nxt.x][nxt.y]==1)
{
if(nxt.time>0)
{
q.push(nxt);
}
}
else if(mmap[nxt.x][nxt.y]==3)
{
if(nxt.time>0)
{
cout<<nxt.step<<endl;
return;
}
}
else if(mmap[nxt.x][nxt.y]==4)
{
if(nxt.time>0)
{
nxt.time=6;
mmap[nxt.x][nxt.y]=0; //遇到能重置时间的点,要把它置成墙,因为如果不这样会造成死循环。并且如果第二次走到这里时间都是一样,但步数会增加。
q.push(nxt); }
}
}
}
cout<<-1<<endl;
} int main()
{
int Case;
cin>>Case;
while(Case--)
{ memset(mmap,0,sizeof(mmap));
cin>>n>>m;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>mmap[i][j];
if(mmap[i][j]==2)
{
si=i,sj=j; //纪录起点坐标。
}
}
}
bfs(); }
return 0;
}

  

hdu 1072 广搜(逃离爆炸迷宫)的更多相关文章

  1. hdu 1072 广搜

    路径是可以重复走的,但是如果再一次走过时间重置点是没有意义的 #include <iostream> #include <cstdio> #include <cstrin ...

  2. hdu 1175(广搜)

    题意:容易理解... 思路:我开始的思路不好实现,而且有漏洞,时间复杂度也高,后来在网上学了下别人的方法,真心感觉很牛B,不仅代码好实现,而且时间复杂度比较低,具体看代码实现吧!! 代码实现: #in ...

  3. hdu 1180(广搜好题)

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

  4. HDU 1072 Nightmare (广搜)

    题目链接 Problem Description Ignatius had a nightmare last night. He found himself in a labyrinth with a ...

  5. hdu 1253:胜利大逃亡(基础广搜BFS)

    胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  6. poj 3984:迷宫问题(广搜,入门题)

    迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7635   Accepted: 4474 Description ...

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

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

  8. HDU 1253 (简单三维广搜) 胜利大逃亡

    奇葩!这么简单的广搜居然爆内存了,而且一直爆,一直爆,Orz 而且我也优化过了的啊,尼玛还是一直爆! 先把代码贴上睡觉去了,明天再来弄 //#define LOCAL #include <ios ...

  9. hdu 5025 Saving Tang Monk 状态压缩dp+广搜

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4092939.html 题目链接:hdu 5025 Saving Tang Monk 状态压缩 ...

随机推荐

  1. 04 Django-ORM多表操作(进阶)

      一.创建模型 下面我们通过图书管理系统,来设计出每张表之间的对应关系. 通过上图关系,来定义一下我们的模型类. from django.db import models class Book(mo ...

  2. vc++如何创建窗口

    创建一个mfc工程,AppWizard可以用来增加和选择一些特性 可以发现一共有五个类,每一个类都有一个基类,都是mfc基础类库中的类 例如将一个类拷贝一下,将CFrameWnd到msdn中查找一下, ...

  3. RemoveAll测试

    foreach (var item in procode) { var reslit = LoadData((string)item.ProductCode.Trim(), item.product_ ...

  4. HDU2516 - 取石子游戏【斐波那契博弈】

    基本描述 有一堆个数为n的石子,游戏双方轮流取石子,满足: 先手不能再第一次把所有石子取完: 之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间,包括1和对手取的石子数的2倍.  取最后石子的人 ...

  5. Linux磁盘分区--GPT分区

    MBR分区表有一定的局限性,最大支持2.1tb硬盘,单块硬盘最多4个主分区. 这里就要引入GPT分区表,可以支持最大18EB的卷,最多支持128个主分区,所以如果使用大于2tb的卷,就必须使用GTP分 ...

  6. SpProcPool阅读笔记--1

    公司产品用了一个开源的框架,最近出了点问题,细看了这个框架. SpProcPool:  https://github.com/spsoft/spprocpool.git 我们的线程池用的是传递文件描述 ...

  7. 导出MNIST的数据集

    在TensorFlow的官方入门课程中,多次用到mnist数据集. mnist数据集是一个数字手写体图片库,但它的存储格式并非常见的图片格式,所有的图片都集中保存在四个扩展名为idx3-ubyte的二 ...

  8. FreeMarker hello

    一.什么是 FreeMarker FreeMarker 是一个用 Java 语言编写的模板引擎,它基于模板来生成文本输出.FreeMarker 与 Web 容器无关,即在 Web 运行时,它并不知道  ...

  9. 串口通讯 ADC0804 数码管

    #include<reg52.h> #include<stdio.h> #include<intrins.h> #define uchar unsigned cha ...

  10. 一个关于 UIPickerView 的 bug

    首先,我下描写叙述一下bug的发生情况: 在使用UIPickerView实现选择城市的时候.出现这样一个Bug 1.在iOS 6的系统上 2.Picker的数据上省份一栏选择了"香港&quo ...