解题心得:

1、注意审题,此题是在规定的时间达到规定的地点,不能早到也不能晚到。并不是最简单的dfs

2、在规定时间达到规定的地点有几个剪枝:

一、公式:所需的步骤 - x相差行 - y相差列 = 偶数。(这个解释很简单,无论怎么走,都可以把走的总路程分解到x方向和y方向,哪怕反向走,走回来后的步骤+反向走的步骤也一定是偶数,假设运用正交分解走到了终点(上面公式),但是步骤没走够,可以以最终的目标点为起点任选两格来回走消耗步骤,但是减去正交分解的步数后若是奇数,那么在终点来回走将步数消耗完之后必然会走出去而不能停留在终点。)

二、总的格数减去墙数一定大于等于所需的步骤

三、当时间超出了所需的时间时要return,并且消除标记。

题目:

Tempter of the Bone

Time Limit :1s

Memory limit :32M

Accepted Submit :305

Total Submit :1026

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.

S

…D

0 0 0

Sample Output

NO

YES

#include<stdio.h>
#include<cstring>
#include<iostream>
using namespace std;
char maps[10][10];
int n,m,t,cnt//记录步骤;
int use[10][10],dir[4][2]={0,1,0,-1,1,0,-1,0};
bool flag//标记是否在规定的时间点找到目标;
struct node
{
int x,y;
}aim,now;//记录出口和启动点
int abs(int num)
{
if(num < 0)
return 0-num;
else
return num;
}
void dfs(int x,int y,int cnt)
{
int i,temp;
if(x == aim.x && y == aim.y && t == cnt)
{
flag = true;
printf("YES\n");
return;
}
temp = abs(t-cnt) - (aim.x - x) - (aim.y - y);//这很重要,一定要注意,在时间超出之后要return,。。。。哎!
if(temp<0 || temp%2)
return;
if(x<0 || y<0 || x>=n || y>=m)
return;
for(i=0;i<4;i++)
{ if(use[x+dir[i][0]][y+dir[i][1]] != 1 && maps[x+dir[i][0]][y+dir[i][1]] != 'X')
{
use[x+dir[i][0]][y+dir[i][1]] = 1;
dfs(x+dir[i][0],y+dir[i][1],cnt+1);
if(flag)
return;
use[x+dir[i][0]][y+dir[i][1]] = 0;
}
}
return;
}
int main()
{
while(scanf("%d%d%d",&n,&m,&t)!=EOF)
{
int d = 0;;
if(n == 0 && m == 0 && t == 0)
break;
cnt = 0;
memset(use,0,sizeof(use));
for(int i=0;i<n;i++)
scanf("%s",maps[i]);
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(maps[i][j] == 'D')
{
aim.x = i;
aim.y = j;
}
if(maps[i][j] == 'S')
{
now.x = i;
now.y = j;
}
if(maps[i][j] == 'X')
d++;
}
}
if(m*n - d < t)
{
printf("NO\n");
continue;
}
flag = false;
use[now.x][now.y] = 1;
dfs(now.x,now.y,cnt);
if(!flag)
printf("NO\n");
}
}

DFS:Tempter of the Bone (规定时间达到规定地点)的更多相关文章

  1. DFS Tempter of the Bone

    http://acm.hdu.edu.cn/showproblem.php?pid=1010 用到了奇偶剪枝: 0 1 0 1 1 0 1 0          如图,设起点为s,终点为e,s-> ...

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

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

  6. 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. ZOJ 2110 Tempter of the Bone(条件迷宫DFS,HDU1010)

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

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

随机推荐

  1. [Environment Build] 工作中遇到的关于Git的问题

    修改已经提交的commit中的author, commit git commit --amend --author 'Your Name <Your Email>' git commit ...

  2. usb-host一步一步学(一)安卓在usb-host模式下列出当前连接的usb设备

    在本次尝试中,我的安卓手机(HTC One X) 通过OTG线作为usb主机模式列出当前插入的usb设备,版本要求minSDKVersion="12". 没有外设的情况下,结果如下 ...

  3. spring-boot 配置jsp

    sring-boot 集成  jsp spring-boot默认使用的页面展示并不是jsp,若想要在项目中使用jsp还需要配置一番. 虽然spring-boot中也默认配置了InternalResou ...

  4. js中的位运算符 ,按位操作符

    按位操作符(Bitwise operators) 将其操作数(operands)当作32位的比特序列(由0和1组成),而不是十进制.十六进制或八进制数值.例如,十进制数9,用二进制表示则为1001.按 ...

  5. 牛客NOIP提高组(三)题解

    心路历程 预计得分:$30 + 0 + 0 = 30$ 实际得分:$0+0+0= 0$ T1算概率的时候没模爆long long了... A 我敢打赌这不是noip难度... 考虑算一个位置的概率,若 ...

  6. Struts2笔记3--OGNL

    一.OGNL入门 1.简介     OGNL的全称是对象图导航语言(Object-Graph Navigation Language),它是一种功能强大的开源表达式语言,使用这种表达式语言,可以通过某 ...

  7. JeeSite 工作流Activiti的应用实例

    新建流程模型 在线办公-流程管理-模型管理-新建模型  点击“提交”后会立即跳转到“流程在线设计器”页面,请看下一章节 在线流程设计器 在线办公流程管理模型管理模型管理编辑 整体流程图 mat ...

  8. js实现排序去重计算字符次数

    /*去重*/ var arr=[1,4,4,7,3,9,0,3,2,1,"你好","你","你好","你 "]; var ...

  9. java 的http请求方式:HttpURLConnection和HttpClient

    1.要了解一些概念性的东西,比如Http的协议以及协议头等一些东东 2.HttpURLConnection一般步骤:创建URL对象==>获取URL的HttpURLConnection对象实例== ...

  10. log4j 配置文件 (XML/.properties)

    xml: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configurat ...