HDU 1010 Tempter of the Bone 骨头诱惑(DFS+剪枝)
题意:
必须在第t秒走到格子D上,S为起点,D为终点,点就是可以走,X就是墙。
思路:
将迷宫外围四面都筑墙‘X’。深度搜索+奇偶剪枝,再加一个剪枝“无法在指定时间内到达”。
#include <iostream>
#include <vector>
#include <string>
#include <math.h>
using namespace std;
vector<string> v;
int n,m;
int x_1,y_1,x_2,y_2;
bool maze(int x,int y,int t) //目前走到第n行m列的位置
{
if(t==) //若t小于0,则检查四个方向是否有门D
{
if(x_2==x && (y_2==y-||y_2==y+))
return true;
if(y_2==y && (x_2==x-||x_2==x+))
return true;
}
else //若不为0,调用4次此函数,分别是四个方向,若该方向不能走,则不调用
{
t--;
v[x][y]=''; //封掉该格子
if(v[x-][y]=='.' && maze(x-,y,t)==true )
return true;
if(v[x+][y]=='.' && maze(x+,y,t)==true )
return true;
if(v[x][y-]=='.' && maze(x,y-,t)==true )
return true;
if(v[x][y+]=='.' && maze(x,y+,t)==true )
return true;
}
v[x][y]='.'; //开放该格子
return false;
}
int main()
{
int t,i,j; //x为行,y为列。
string temp="",tem="XXXXXXXX";
while(scanf("%d %d %d",&n,&m,&t)&&n!=)
{
v.push_back(tem);
for(i=;i<n;i++)
{
cin>>temp;
temp='X'+temp;
temp+='X'; //围起来
v.push_back(temp);
if(temp.find('S')!=-)
{
x_1=i+;y_1=temp.find('S');
}
if(temp.find('D')!=-)
{
x_2=i+;y_2=temp.find('D');
}
}
v.push_back(tem); if( abs(y_2-y_1)+abs(x_2-x_1)>t)
printf("NO\n");
else if( (abs(y_2-y_1)+abs(x_2-x_1))%!=t% )
printf("NO\n");
else if(maze(x_1,y_1,t)==true)
printf("YES\n");
else
printf("NO\n");
v.clear();
}
return ;
}
1010
题目直译:
小狗在一个古老的迷宫里发现一根骨头,迷宫让它很惊讶。但是,当他拿起骨头,迷宫开始振动,而小狗能够感觉到地面在下沉。
它意识到骨头是个陷阱,他准备分身一试逃出迷宫。
迷宫是个矩形,其大小是N*M,有个门在迷宫里。在一开始,门是关的,它将会在第T秒开一小段时间(小于1秒)。
因此,小狗必须在刚好T秒时到达门的旁边。每一秒,小狗能够移动一步到当前块块的上、下、左、右的块。
一旦它进入一个块,这块的地面将开始下沉并消失在下一秒(即每个位置只能走一次)。它不能够呆在一个块上超过1秒,也不能进入一个已走过过的块。
这只小狗能活下去吗?请帮助他。
输入:第一行包括3个整数N、M、T,分别代表迷宫的大小、迷宫门会开的时刻。
接下来N行是迷宫的布局,每行包括M个字符,只能是以下四种之一:
X:一面墙,不能进入
S:狗的起点
D:迷宫门
.:一个空块。
1<N
M<7
0 < T < 50
HDU 1010 Tempter of the Bone 骨头诱惑(DFS+剪枝)的更多相关文章
- HDU 1010 Tempter of the Bone (ZOJ 2110) DFS+剪枝
传送门: HDU:http://acm.hdu.edu.cn/showproblem.php?pid=1010 ZOJ:http://acm.zju.edu.cn/onlinejudge/showPr ...
- HDU 1010 Tempter of the Bone --- DFS
HDU 1010 题目大意:给定你起点S,和终点D,X为墙不可走,问你是否能在 T 时刻恰好到达终点D. 参考: 奇偶剪枝 奇偶剪枝简单解释: 在一个只能往X.Y方向走的方格上,从起点到终点的最短步数 ...
- HDU 1010 Tempter of the Bone【DFS经典题+奇偶剪枝详解】
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- hdu 1010 Tempter of the Bone 奇偶剪枝
如果所给的时间(步数) t 小于最短步数path,那么一定走不到. 若满足t>path.但是如果能在恰好 t 步的时候,走到出口处.那么(t-path)必须是二的倍数. 关于第二种方案的解释 ...
- hdu.1010.Tempter of the Bone(dfs+奇偶剪枝)
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- hdu 1010:Tempter of the Bone(DFS + 奇偶剪枝)
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- Hdu 1010 Tempter of the Bone 分类: Translation Mode 2014-08-04 16:11 82人阅读 评论(0) 收藏
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- hdu 1010 Tempter of the Bone 深搜+剪枝
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- hdu 1010 Tempter of the Bone(dfs)
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
随机推荐
- hdu 2897 邂逅明下 (简单巴什博弈)
题目链接 邂逅明下 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- neutron负载均衡高可用测试
对工作中,实验环境的一个小总结 1.创建高可用负载均衡器------创建高可用的时候,添加上ha-mode参数即可 neutron lb-pool-create --lb-method ROUND_R ...
- http://lorempixel.com/ 可以快速产生假图
http://lorempixel.com/可以快速产生假图
- 2017-10-7 清北刷题冲刺班p.m
测试 A 同花顺 文件名 输入文件 输出文件 时间限制 空间限制card.cpp/c/pas card.in card.out 1s 512MB题目描述所谓同花顺,就是指一些扑克牌,它们花色相同,并且 ...
- CF622F The Sum of the k-th Powers(拉格朗日插值)
题意 给出 \(n,k\) , \(n\le10^9,k\le10^6\) ,求 \(\sum_{i=1}^n i^k(mod\;10^9+7)\) 题解 自然数幂次和,是一个\(k+1\)次多项式, ...
- [Xcode 实际操作]四、常用控件-(12)环形进度条控件的使用
目录:[Swift]Xcode实际操作 本文将演示环形进度条控件的使用. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit class Vi ...
- [Xcode 实际操作]四、常用控件-(4)UILabel文本标签的自动换行
目录:[Swift]Xcode实际操作 本文将演示标签控件的换行功能, 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit class Vie ...
- Java 引用类型
若内存中一个对象没有任何引用的话,则可以认为该对象已经不再使用了,可以成为GC的候选.不过由于垃圾回收器的运行时间不确定,可被垃圾回收的对象的实际被回收时间是不确定的.对于一个对象来说,只要有引用的存 ...
- centos7安装配置docker
1. 安装/升级Docker客户端 Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker . uname -r 从 ...
- 如何使用JMETER从JSON响应中提取数据
如果你在这里,可能是因为你需要使用JMeter从Json响应中提取变量. 好消息!您正在掌握掌握JMeter Json Extractor的权威指南.作为Rest API测试指南的补充,您将学习掌握J ...