Problem Description
The doggie
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.
Input
The input
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.
Output
For each test
case, print in one line "YES" if the doggie can survive, or "NO"
otherwise.
Sample Input
4 4 5
S.X.
..X.
..XD
....
3 4 5
S.X.
..X.
...D
0 0 0
Sample Output
NO
YES
题意:小狗找出口,给你一个n*m的地图和小狗,门的位置,让你小狗能否刚好在t时到达门口;
解题思路:刚开始想的是用广搜求出最小时间,如果最小时间
另外还可以加一个剪枝条件,当然了不加这个也能AC,(n*m-s<=t),t过大的时候肯定不能按时到达了;
感悟:深搜好些但是,剪枝不好写啊,不剪枝就会超时,好烦的!
代码:
#include

#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的更多相关文章

  1. 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 ...

  2. 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 ...

  3. 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 ...

  4. HDU 1010 Tempter of the Bone --- DFS

    HDU 1010 题目大意:给定你起点S,和终点D,X为墙不可走,问你是否能在 T 时刻恰好到达终点D. 参考: 奇偶剪枝 奇偶剪枝简单解释: 在一个只能往X.Y方向走的方格上,从起点到终点的最短步数 ...

  5. 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 ...

  6. 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 ...

  7. Tempter of the Bone(dfs+奇偶剪枝)

    Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  8. hdu 1010 Tempter of the Bone 深搜+剪枝

    Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  9. Tempter of the Bone(dfs奇偶剪枝)

    Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  10. ZOJ 2110 Tempter of the Bone(条件迷宫DFS,HDU1010)

    题意  一仅仅狗要逃离迷宫  能够往上下左右4个方向走  每走一步耗时1s  每一个格子仅仅能走一次且迷宫的门仅仅在t时刻打开一次  问狗是否有可能逃离这个迷宫 直接DFS  直道找到满足条件的路径 ...

随机推荐

  1. css左右布局的几种实现方式和优缺点

    记录一下左右布局的实现方式,实现的具体效果是,左侧固定宽度,高度适中等于父元素的高度,父元素的高度由右侧内容决定: html代码如下: <div class="parent" ...

  2. 九月 26, 2017 10:18:14 上午 com.sun.jersey.server.impl.application.RootResourceUriRules <init> 严重: The ResourceConfig instance does not contain any root resource classes.

    Tomcat启动错误:九月 26, 2017 10:18:14 上午 com.sun.jersey.server.impl.application.RootResourceUriRules <i ...

  3. Java的基本程序设计结构【2】

    注释 与大多数程序设计语言一样,Java 中的注释也不会出现在可执行程序中.因此,可以在源程序中根据需要添加任意多的注释,而不必担心可执行代码会膨胀.在Java 中,有三种书写注释的方式. 最常用的方 ...

  4. linux下快速列出文件列表的方法

    前言 这两天碰到一个很棘手的问题,需要读取出ubuntu系统中某个目录下所有文件,由于服务器中存储的文件实在太多,导致此过程效率十分低下,动辄需要等待一个小时之久,还只是一个目录.于是如何快速获取文件 ...

  5. URL不能过长,否则summit方法提交失败

    MVC5.0+EF6.0,和浏览器的版本有关系.IE最多1024KB. URL不能过长,否则summit方法提交失败.

  6. 简单Elixir游戏服设计-玩法simple_poker

    上回介绍了玩法,现在编写了玩法的简单建模. 做到现在感觉目前还没有使用umbrella的必要(也许以后会发现必要吧),model 应用完全可以合并到game_server. 代码还在https://g ...

  7. Jquery+Ajax限制查询间隔

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Jquery20150305.a ...

  8. (转)JVM类生命周期概述:加载时机与加载过程

    原文地址: http://blog.csdn.net/justloveyou_/article/details/72466105 JVM类加载机制主要包括两个问题:类加载的时机与步骤 和 类加载的方式 ...

  9. 转:C++输入一行字符串的一点小结

    原文链接: http://www.wutianqi.com/?p=1181 大家在学习C++编程时,一般在输入方面都是使用的cin.而cin是使用空白(空格,制表符和换行符)来定字符串的界的.这就导致 ...

  10. 怎用不用工具创建一个javaWeb项目

    整体步骤是: 1: 新建一个文件夹:  以项目名称命名 2:在新建的文件夹下再新建一个文件夹 WEB-INF  (注意:大小写) 和 一个文件  index.jsp : index.jsp里面的代码: ...