Tempter of the Bone
found a bone in an ancient maze, which fascinated him a lot.
However, when he picked it up, the maze began to shake, and the
doggie could feel the ground sinking. He realized that the bone was
a trap, and he tried desperately to get out of this maze.
The maze was a rectangle with sizes N by M. There was a door in the
maze. At the beginning, the door was closed and it would open at
the T-th second for a short period of time (less than 1 second).
Therefore the doggie had to arrive at the door on exactly the T-th
second. In every second, he could move one block to one of the
upper, lower, left and right neighboring blocks. Once he entered a
block, the ground of this block would start to sink and disappear
in the next second. He could not stay at one block for more than
one second, nor could he move into a visited block. Can the poor
doggie survive? Please help him.
consists of multiple test cases. The first line of each test case
contains three integers N, M, and T (1 < N, M < 7; 0 < T
< 50), which denote the sizes of the maze and the time at which
the door will open, respectively. The next N lines give the maze
layout, with each line containing M characters. A character is one
of the following:
'X': a block of wall, which the doggie cannot enter;
'S': the start point of the doggie;
'D': the Door; or
'.': an empty block.
The input is terminated with three 0's. This test case is not to be
processed.
case, print in one line "YES" if the doggie can survive, or "NO"
otherwise.
..X.
....
#include
#include
#include
#include
#define maxn 205
using namespace std;
int visit[maxn][maxn];//这个是记录步数的不是记录走没走的不能用布尔型
char mapn[maxn][maxn];
int n,m,t,direction[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int sx,sy,dx,dy;
bool flag;
void dfs(int x,int y,int time)
{
if(x<1||x>n||y<1||y>m)//边界
return;
if(flag==1)
return;
if(x==dx&&y==dy&&time==t)//找到D了
{
if(time=t)
flag=1;
return;
}
int
temp=(t-time)-abs(x-dx)-abs(y-dy);//奇偶性剪枝
if(temp<0||temp&1) return;
for(int
i=0;i<4;i++)
{
int x1=x+direction[i][0];
int y1=y+direction[i][1];
if(mapn[x1][y1]!='X')
{
mapn[x1][y1]='X';
dfs(x1,y1,time+1);
mapn[x1][y1]='.';//不满足条件的话就返回
}
}
return;
}
int main()
{
int
s=0;
//freopen("in.txt", "r", stdin);
while(~scanf("%d%d%d\n",&n,&m,&t)&&n&&m&&t)
{
flag=s=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
scanf("%c",&mapn[i][j]);
if(mapn[i][j]=='S')
{
sx=i;
sy=j;//狗的位置
}
if(mapn[i][j]=='D')
{
dx=i;
dy=j;//门的位置
}
if(mapn[i][j]=='X')
s++;
}
scanf("\n");
}
mapn[sx][sy]='X';
memset(visit,0,sizeof(visit));
//for(int i=1;i<=n;i++)
//{
// for(int
j=1;j<=m;j++)
// {
//
printf("%c",mapn[i][j]);
// }
//
printf("\n");
//}
if (n*m-s<=t)//提前判断t过大的情况避免再去搜
{
printf("NO\n");
continue;
}
dfs(sx,sy,0);
//printf("最少走 %d 秒 有 %d 秒\n",ans,t);
if(flag)
printf("YES\n");
else
printf("NO\n");
}
}
Tempter of the Bone的更多相关文章
- 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 ...
- ZOJ 2110 Tempter of the Bone
Tempter of the Bone Time Limit: 2 Seconds Memory Limit: 65536 KB The doggie found a bone in an ...
- 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
HDU 1010 题目大意:给定你起点S,和终点D,X为墙不可走,问你是否能在 T 时刻恰好到达终点D. 参考: 奇偶剪枝 奇偶剪枝简单解释: 在一个只能往X.Y方向走的方格上,从起点到终点的最短步数 ...
- 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 ...
- hdoj 1010 Tempter of the Bone【dfs查找能否在规定步数时从起点到达终点】【奇偶剪枝】
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- 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 深搜+剪枝
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- Tempter of the Bone(dfs奇偶剪枝)
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- ZOJ 2110 Tempter of the Bone(条件迷宫DFS,HDU1010)
题意 一仅仅狗要逃离迷宫 能够往上下左右4个方向走 每走一步耗时1s 每一个格子仅仅能走一次且迷宫的门仅仅在t时刻打开一次 问狗是否有可能逃离这个迷宫 直接DFS 直道找到满足条件的路径 ...
随机推荐
- 业余草通告CSDN博客用户zhang__ao非法转载文章的公告
今天早上有粉丝给我反馈,CSDN的一位用户大量非法的转载了我的个人网站:业余草(www.xttblog.com)上的大量文章.现一对该用户转载业余草上网站上的所有文章进行了举报! 从上图中可以看出,该 ...
- mybatis枚举映射成tinyint
第一步:定义顶级枚举接口 public interface BaseEnum<E extends Enum<?>, T> { public T getCode(); publi ...
- 第6章 Overlapped I/O, 在你身后变戏法 ---1
这一章描述如何使用 overlapped I/O(也就是 asynchronous I/O).某些时候 overlapped I/O 可以取代多线程的功用.然而,overlapped I/O 加上co ...
- C++ Primer Plus 6 第二章
// myfirst.cpp--displays a message #include <iostream> // a PREPROCESSOR directive int main() ...
- mui框架移动开发初体验
前 言 博主最近在接触移动APP,学习了几个小技巧,和大家分享一下. 1. 状态栏设置 现在打开绝大多数APP,状态栏都是与APP一体,不仅美观,而且与整体协调.博主是个中度强迫症患者,顶部那个 ...
- Hadoop(三)手把手教你搭建Hadoop全分布式集群
前言 上一篇介绍了伪分布式集群的搭建,其实在我们的生产环境中我们肯定不是使用只有一台服务器的伪分布式集群当中的.接下来我将给大家分享一下全分布式集群的搭建! 其实搭建最基本的全分布式集群和伪分布式集群 ...
- HDU3605 Escape
思想:缩点+sap Max,t还可以缩小,优化,高数课写的,有点丑,暂时懒得改. #include<cstdio> #include<cstdlib> #include< ...
- JS实现数组每次只显示5条数据
var array = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]; //循环样式结构function fun(arr,index){ var str = &qu ...
- 编写 WPF DataGrid 列模板,实现更好的用户体验
Julie Lerman 下载代码示例 最近我在为一个客户做一些 Windows Presentation Foundation (WPF) 方面的工作. 虽然我提倡使用第三方工具,但有时也会避免使用 ...
- 将 C# 枚举反序列化为 JSON 字符串 基础理论
该转换过程需要引用 Newtonsoft.JSON,这其中的转换过程还是蛮有意思的. 一.定义枚举 /// <summary> /// 托寄物品枚举 /// </summary> ...