Tempter of the Bone

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 102071    Accepted Submission(s): 27649

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

———————————————————————————————
题目的意思是从地图的S点搜到D点,‘.’为路‘X’为墙,问能否正好在t秒时到达终点。
处理方法是直接DFS搜索,加上剪枝。

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std; int m, n, t;
char mp[10][10];
int dir[4][2] = { { 1, 0 }, { -1, 0 }, { 0, -1 }, { 0, 1 } };
bool escape; bool check(int x, int y)
{
if (x < 0 || x >= m||y < 0 || y >= n||mp[x][y] == 'X')
return 0;
return 1;
} void dfs(int si,int sj,int di,int dj,int cnt)
{
if (si == di&&sj == dj&&cnt == t)
{
escape = 1;
return;
}
int tmp = t-cnt-abs(di - si) - abs(dj - sj); if (tmp < 0 || tmp % 2)
return; for (int i = 0; i < 4; i++)
{
int xx = si + dir[i][0];
int yy = sj + dir[i][1];
if (check(xx, yy))
{
mp[xx][yy] = 'X';
dfs(xx, yy, di, dj, cnt + 1);
mp[xx][yy] = '.';
if (escape == 1)
return;
}
}
} int main()
{
int si, sj, di, dj;
while (~scanf("%d%d%d", &m, &n, &t))
{
if (m == 0 || n == 0 || t == 0)
break;
int wall = 0;
for (int i = 0; i < m; i++)
{
scanf("%s", &mp[i]);
for (int j = 0; j < n; j++)
{
if (mp[i][j] == 'S')
{
si = i;
sj = j;
}
if (mp[i][j] == 'D')
{
di = i;
dj = j;
}
if (mp[i][j] == 'X')
wall++;
} }
if (t > m*n - wall)
{
printf("NO\n");
continue;
}
escape = 0;
mp[si][sj] = 'X';
dfs(si, sj, di, dj, 0);
if (escape == 1)
printf("YES\n");
else
printf("NO\n"); }
return 0;
}












Hdu1010 Tempter of the Bone(DFS+剪枝) 2016-05-06 09:12 432人阅读 评论(0) 收藏的更多相关文章

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

  2. HDU1010:Tempter of the Bone(dfs+剪枝)

    http://acm.hdu.edu.cn/showproblem.php?pid=1010   //题目链接 http://ycool.com/post/ymsvd2s//一个很好理解剪枝思想的博客 ...

  3. HDU1518 Square(DFS) 2016-07-24 15:08 49人阅读 评论(0) 收藏

    Square Problem Description Given a set of sticks of various lengths, is it possible to join them end ...

  4. leetcode N-Queens/N-Queens II, backtracking, hdu 2553 count N-Queens, dfs 分类: leetcode hdoj 2015-07-09 02:07 102人阅读 评论(0) 收藏

    for the backtracking part, thanks to the video of stanford cs106b lecture 10 by Julie Zelenski for t ...

  5. Red and Black(BFS or DFS) 分类: dfs bfs 2015-07-05 22:52 2人阅读 评论(0) 收藏

    Description There is a rectangular room, covered with square tiles. Each tile is colored either red ...

  6. A Knight's Journey 分类: dfs 2015-05-03 14:51 23人阅读 评论(0) 收藏

    A Knight’s Journey Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 34085 Accepted: 11621 ...

  7. Hdu1016 Prime Ring Problem(DFS) 2016-05-06 14:27 329人阅读 评论(0) 收藏

    Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  8. HDU1045 Fire Net(DFS枚举||二分图匹配) 2016-07-24 13:23 99人阅读 评论(0) 收藏

    Fire Net Problem Description Suppose that we have a square city with straight streets. A map of a ci ...

  9. hdu2602 Bone Collector(01背包) 2016-05-24 15:37 57人阅读 评论(0) 收藏

    Bone Collector Problem Description Many years ago , in Teddy's hometown there was a man who was call ...

随机推荐

  1. President's Office

    President of Berland has a very vast office-room, where, apart from him, work his subordinates. Each ...

  2. Android.ApplicationCrash

    1. 如何调试分析Android中发生的tombstone http://www.360doc.com/content/12/1017/10/7580194_241974419.shtml tombs ...

  3. 各种平台的表达芯片跟mRNA-seq数据比较

    各种平台的表达芯片跟mRNA-seq数据比较 RNA-Seq 表达谱 芯片数据分析 文章见:http://journals.plos.org/plosone ... ournal.pone.00786 ...

  4. Java开发环境安装配置

    电脑配置:Win7 64位 JDK1.8+Apache Tomcat8.5.4 下载JDK1.8 全名: Java SE Development Kit 8u151,下载最新稳定版本 下载地址:htt ...

  5. CRC在线计算工具

    http://www.lammertbies.nl/comm/info/crc-calculation.html

  6. 前端之javascript的DOM对象和标签

    一 DOM对象介绍 什么是HTML DOM 1.1 HTML Document Object Model(文档对象模型) 1.2 HTML DOM 定义了访问和操作HTML文档的标准方法. 1.3 H ...

  7. 手机上输入http://192.168.1.102:8888/FiddlerRoot.cer为什么下载不了证书

    因为之前你的手机可能已经安装了该证书,所以再次下载会说找不到证书 解决办法:如果你遇到上面的问题,就可能是证书的问题(我的本地证书是用系统生成证书的一个软件生成的个人证书,所以出现了问题),操作步骤如 ...

  8. 使用thymeleaf一旦没有闭合标签就会报错怎么解决

    问题:input标签未关闭报bug,代码稍有不慎就出小问题 使用springboot的thymeleaf模板时默认会对HTML进行严格的检查,导致当你的标签没有闭合时就会通不过,例如: //要想通过, ...

  9. Firefox table 不居中解决办法 解决火狐层或 table 不居中

    Firefox table 不居中解决办法: table 使用 align="center" ,IE正常,Firefox 却是居左了,网上有各种解决的办法,比如在table外面再套 ...

  10. 02 Django配置信息

    2-1 基本配置信息 import os # 项目路径 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # ...