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. 读Zepto源码之Gesture模块

    Gesture 模块基于 IOS 上的 Gesture 事件的封装,利用 scale 属性,封装出 pinch 系列事件. 读 Zepto 源码系列文章已经放到了github上,欢迎star: rea ...

  2. ThinkPHP中:用户登录权限验证类

    使用CommonAction.class.php公共类,统一判断用户是否登录 <?php //后台登录页 Class CommonAction extends Action{ //后台登录页面 ...

  3. ssh (免密码登录、开启服务)

    ssh 无密码登录要使用公钥与私钥.linux下可以用用ssh-keygen生成公钥/私钥对,下面我以Unbutun为例.有机器A(192.168.1.155),B(192.168.1.181).现想 ...

  4. 用python的TK模块实现猜成语游戏(附源码)

    说明:本游戏使用到的python模块有tkinter,random,hashlib:整个游戏分为四个窗口,一个进入游戏的窗口.一个选关窗口.一个游戏进行窗口和一个游戏结束的窗口. 源码有两个主要的py ...

  5. Liers 树状数组+中国剩余定理

    Liers Time Limit: 14000/7000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) SubmitStatus ...

  6. 从头编写 asp.net core 2.0 web api 基础框架 (1)

    工具: 1.Visual Studio 2017 V15.3.5+ 2.Postman (Chrome的App) 3.Chrome (最好是) 关于.net core或者.net core 2.0的相 ...

  7. Docker入门之七Dockerfile

    Dockerfile是一个文本格式的配置文本,可以使用它来创建自定义的镜像.首先我们可以先看一个dockerfile是什么样子.这里可以有一个网站不错:http://dockerfile.github ...

  8. 阿里云AliYun表格存储(Table Store)相关案例

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. ios获取本机网络IP地址方法

    #include <ifaddrs.h> #include <arpa/inet.h>     - (NSString *)getIPAddress {           N ...

  10. 敏捷开发(2)-Scrum

    什么是SCRUM Scrum的英文意思是橄榄球运动的一个专业术语,表示“争球”的动作:把一个开发流程的名字取名为Scrum,我想你一定能想象出你的开发团队在开发一个项目时,大家像打橄榄球一样迅速.富有 ...