http://acm.hdu.edu.cn/showproblem.php?pid=1072

/*
题意:
迷宫内有入口和出口 在6分钟结束后炸弹会爆炸,但是迷宫内有重置炸弹的装置,可以重置炸弹的时间重新为6分钟
2代表入口,3代表出口 0代表墙 1代表路4代表重置炸弹的装置,每移动一步花费一分钟
求 走出迷宫的 最少移动步数 若不能走出迷宫输出-1;

分析:
与以往做的搜索题目有点不一样 此题可以走已经走过的路线 例如:直接走不能到达出口,但是旁边有一个4 可以先去走4增加时间 再回头接着走
这样时间增加了,

*/重生的一题

include

include

using namespace std;
int miGong[10][10];
int dir[4][2]={0,1,1,0,0,-1,-1,0};
struct node
{
int x;
int y;
int time;
int s;
};
int bfs(int startX,int startY,int m,int n)
{
queue q;
node a;
a.x=startX;
a.y=startY;
a.s=0;
a.time=6;
q.push(a);
while(q.size())
{
a=q.front();
q.pop();
if(miGong[a.x][a.y]==3)return a.s;//走到出口了
if(a.time==1)continue;//因为如果是在零时走到出口也会爆炸,逃亡失败
for(int i=0;i<4;i++)
{
int tx=a.x+dir[i][0];
int ty=a.y+dir[i][1];
if(tx<1||tx>m||ty<1||ty>n)
continue;
if(miGong[tx][ty]!=0)
{
node b;
b.x=tx;
b.y=ty;
b.s=a.s+1;
if(miGong[tx][ty]==4)//重置炸弹的这一步不能重复走,因为这是一次性的,用过一次就不能再用了
{ //如果走了这一步增加时间尚不能到达出口,那么第二次走的时候不能增加时间更不能到达出口了
b.time=6;
miGong[tx][ty]=0;
}
else b.time=a.time-1;
q.push(b);
}
}

}
return -1;

}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int m,n;
int startX,startY;
scanf("%d%d",&m,&n);
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
{
scanf("%d",&miGong[i][j]);
if(miGong[i][j]==2)
{
startX=i;
startY=j;
}
}
printf("%d\n",bfs(startX,startY,m,n));
}
}

Nightmare(搜索)的更多相关文章

  1. kuangbin专题 专题二 搜索进阶 Nightmare Ⅱ HDU - 3085

    题目链接:https://vjudge.net/problem/HDU-3085 题意:有两个鬼和两个人和墙,鬼先走,人再走,鬼每走过的地方都会复制一个新鬼, 但新鬼只能等待旧鬼走完一次行程之后,下一 ...

  2. e2e测试之Nightmare

    一.e2e测试简介 e2e或者端到端(end-to-end)或者UI测试是一种测试方法,它用来测试一个应用从头到尾的流程是否和设计时候所想的一样.简而言之,它从一个用户的角度出发,认为整个系统都是一个 ...

  3. HDUOJ-----(1072)Nightmare(bfs)

    Nightmare Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  4. 步步为营(十六)搜索(二)BFS 广度优先搜索

    上一篇讲了DFS,那么与之相应的就是BFS.也就是 宽度优先遍历,又称广度优先搜索算法. 首先,让我们回顾一下什么是"深度": 更学术点的说法,能够看做"单位距离下,离起 ...

  5. HDU1072:Nightmare [DFS]

    题目链接:Nightmare 题意: 给出一张n*m的图,0代表墙,1代表可以走,2代表起始点,3代表终点,4代表炸弹重置点 问是否能从起点到达终点 分析: 一道很好的DFS题目,炸弹重置点必然最多走 ...

  6. Nightmare Ⅱ(双向BFS)

    Problem Description Last night, little erriyue had a horrible nightmare. He dreamed that he and his ...

  7. 爬虫的终极形态:nightmare

    爬虫的终极形态:nightmare nightmare 是一个基于 electron 的自动化库(意思是说它自带浏览器),用于实现爬虫或自动化测试.相较于传统的爬虫框架(scrapy/pyspider ...

  8. SQLSERVER走起微信公众帐号已经开通搜狗微信搜索

    SQLSERVER走起微信公众帐号已经开通搜狗微信搜索 请打开下面链接 http://weixin.sogou.com/gzh?openid=oIWsFt-hiIb_oYqQHaBMoNwRB2wM ...

  9. solr_架构案例【京东站内搜索】(附程序源代码)

    注意事项:首先要保证部署solr服务的Tomcat容器和检索solr服务中数据的Tomcat容器,它们的端口号不能发生冲突,否则web程序是不可能运行起来的. 一:solr服务的端口号.我这里的sol ...

随机推荐

  1. Gprinter Android SDK V2.1.4 使用说明

    佳博打印机Android的SDK开发包,已更新到Gprinter Android SDK V2.1.4. IOS的SDK开发包更新为GprinterSDKandDemoforIOS_v1.0.8. 根 ...

  2. shell脚本学习之case例子

    case和select结构在技术上说并不是循环, 因为它们并不对可执行代码块进行迭代. 但是和循环相似的是, 它们也依靠在代码块顶部或底部的条件判断来决定程序的分支.  在代码块中控制程序分支  ca ...

  3. C# DateTime

    //c datetime 格式化DateTime dt = DateTime.Now;Label1.Text = dt.ToString();//2005-11-5 13:21:25Label2.Te ...

  4. ZOJ2112 Dynamic Rankings 动态区间第K最值 平方分割

    有了上一题的经验(POJ的静态区间第K最值)再解决这道题就轻松多了 空间5256KB,时间3330ms,如果把动态开点的平衡树换成数组模拟的话应该会更快 之所以选择了平方分割而不是树套树,不仅是所谓趁 ...

  5. 【转】linux 必须掌握的60个命令

    Linux必学的60个命令Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在Linux系统上工作离不开使用系统提供的命令.要 ...

  6. sql server 数据分页显示。

    select [ID] ,[StockApplyCode] ,[RcCode] ,[LabCenterCode] ,[LabGroupCode] ,[LabGroupName] ,[Barcode] ...

  7. Day13 SQLAlchemy连表操作和堡垒机

    一.数据库操作 1.创建表.插入数据和一对多查询 #!/usr/bin/env python # -*- coding: utf-8 -*- # Author: wanghuafeng from sq ...

  8. 那些年被我坑过的Python——山外有山(第四章)

    装饰器: 定义: 本质是函数,(装饰其他函数)就是为其他函数添加附加功能原则: 1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式 优点: 装饰器带来的最直观的好处:减少对函数的细化 ...

  9. xcode 工具 alcatraz---备用

    简介 Alcatraz 是一个帮你管理 Xcode 插件.模版以及颜色配置的工具.它可以直接集成到 Xcode 的图形界面中,让你感觉就像在使用 Xcode 自带的功能一样. 安装和删除 使用如下的命 ...

  10. 关于存储的--b

    iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. documents,tmp,app,Library. (NSHomeDirectory ...