Nightmare(搜索)
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(搜索)的更多相关文章
- kuangbin专题 专题二 搜索进阶 Nightmare Ⅱ HDU - 3085
题目链接:https://vjudge.net/problem/HDU-3085 题意:有两个鬼和两个人和墙,鬼先走,人再走,鬼每走过的地方都会复制一个新鬼, 但新鬼只能等待旧鬼走完一次行程之后,下一 ...
- e2e测试之Nightmare
一.e2e测试简介 e2e或者端到端(end-to-end)或者UI测试是一种测试方法,它用来测试一个应用从头到尾的流程是否和设计时候所想的一样.简而言之,它从一个用户的角度出发,认为整个系统都是一个 ...
- HDUOJ-----(1072)Nightmare(bfs)
Nightmare Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- 步步为营(十六)搜索(二)BFS 广度优先搜索
上一篇讲了DFS,那么与之相应的就是BFS.也就是 宽度优先遍历,又称广度优先搜索算法. 首先,让我们回顾一下什么是"深度": 更学术点的说法,能够看做"单位距离下,离起 ...
- HDU1072:Nightmare [DFS]
题目链接:Nightmare 题意: 给出一张n*m的图,0代表墙,1代表可以走,2代表起始点,3代表终点,4代表炸弹重置点 问是否能从起点到达终点 分析: 一道很好的DFS题目,炸弹重置点必然最多走 ...
- Nightmare Ⅱ(双向BFS)
Problem Description Last night, little erriyue had a horrible nightmare. He dreamed that he and his ...
- 爬虫的终极形态:nightmare
爬虫的终极形态:nightmare nightmare 是一个基于 electron 的自动化库(意思是说它自带浏览器),用于实现爬虫或自动化测试.相较于传统的爬虫框架(scrapy/pyspider ...
- SQLSERVER走起微信公众帐号已经开通搜狗微信搜索
SQLSERVER走起微信公众帐号已经开通搜狗微信搜索 请打开下面链接 http://weixin.sogou.com/gzh?openid=oIWsFt-hiIb_oYqQHaBMoNwRB2wM ...
- solr_架构案例【京东站内搜索】(附程序源代码)
注意事项:首先要保证部署solr服务的Tomcat容器和检索solr服务中数据的Tomcat容器,它们的端口号不能发生冲突,否则web程序是不可能运行起来的. 一:solr服务的端口号.我这里的sol ...
随机推荐
- jQuery实现页面滚动时顶部动态显示隐藏
http://www.jqcool.net/jquery-scroll.html 另外headroom.js也行:http://www.bootcss.com/p/headroom.js/
- Java中JIN机制及System.loadLibrary() 的执行过程
Android平台Native开发与JNI机制详解 http://mysuperbaby.iteye.com/blog/915425 个人认为下面这篇转载的文章写的很清晰很不错. 注意Android平 ...
- jquery 银行卡号验证
具体参考:https://github.com/jondavidjohn/payform 插件js: jquery.payform.js 具体操作 alert($.payform.validateCa ...
- OpenCart 之registry功用
1. “Registry”设计模式 在OpenCart中,Registry是整个系统的信息中枢. Registry是一个单例(Singleton),在index.php起始页面中, 首先作为构造函数参 ...
- 一个Socket数据处理模型
Socket编程中,如何高效地接收和处理数据,这里介绍一个简单的编程模型. Socket索引 - SocketId 在给出编程模型之前,先提这样一个问题,程序中如何描述Socket连接? 为什么这么问 ...
- 解决Xcode7多个模拟器的方法
xcode模拟器都这样显示,没办法判断是哪个系统,解决办法是 1.关闭xcode 2.终端输入 sudo killall -9 com.apple.CoreSimulator.CoreSimulato ...
- C# div布局
本文讲解使用DIV+CSS布局最基本的内容,读完本文你讲会使用DIV+CSS进行简单的页面布局. 转载请标明:http://www.kwstu.com/ArticleView/divcss_20139 ...
- SpringMVC4+thymeleaf3的一个简单实例(篇五:页面和MySql的数据交互-展示以及存储)
这一篇将介绍怎样把页面数据保存的MySQL数据库,并将数据库内容展示到页面上.首先做一个基础工作,添加以下jar到lib:1: mysql-connector-Java-5.1.40-bin.jar ...
- Sqoop import加载HBase案例详解
简单写一下如何将订单表sqoop到hbase表中的步骤. 下表: 1.通过hbase shell 打开hbase. 2.创建一个hbase表 create 'so','o' 3.将so表的数据导入到h ...
- 微信小程序,大多数人误解的8个问题
作者:王安,数字天堂DCloud公司创始人兼CEO 注:本文内容包含技术.商业,不懂技术的读者可以只看商业相关的内容.本文仅代表作者一家之言,如有不同意见,欢迎留言讨论~ 8个误解 坊间所传的信息很多 ...