小明做了一个很久很久的梦,醒来后他竟发现自己和朋友在一个摇摇欲坠的大棋盘上,他们必须得想尽一切办法逃离这里。
经过长时间的打探,小明发现,自己所在的棋盘格子上有个机关,上面写着“你只有一次机会,出发后t秒大门会为你敞开”,而他自己所在的棋盘是大小为 N*M 的长方形,他可以向上下左右四个方向移动(不可走有障碍点)。棋盘中有一扇门。根据机关的提示,小明顿时明白了,他和朋友必须在第 t 秒到门口。而这一切,没有回头路!因为一旦他移动了,他刚才所在的点就会消失,并且他不能在一个点上停留超过一秒,不然格子会爆炸。大逃亡开始了,请问小明和朋友能安全的逃出这奇怪的棋盘吗?

Input

输入多组测试数据。每个测试用例的第一行包含三个整数 N、M 和 T ( 1 < N , M < 7 ; 0 < T < 50 ),分别表示棋盘的大小和门打开的时间。接下来的N行给出棋盘布局,每一行包含M个字符。其中
".": 无障碍点
"X": 障碍点
"S": 起点
"D": 门

输入以 3 个 0 结束。这个测试用例不需要处理。
输入数据中的空格有些问题,请不要使用getchar(),如果一定要用可以选择scanf("%s",) 自动忽略空格

Output

对于每组样例输出一行。
如果小明能够安全逃出,输出 "YES" ,否则输出 "NO"。

Sample Input

4 4 5
S.X.
..X.
..XD
....
3 4 5
S.X.
..X.
...D
0 0 0

Sample Output

NO
YES
题目大意就是判断能否在规定的时间恰好走到终点,简单DFS 看其他大佬的博文时,他们都用到了什么奇偶减枝,,我也不会。。。这题目完全水过去的。
#include<iostream>
#include<math.h>
#include<cstring>
using namespace std;
char arr[100][100];
int mark[100][100];
int n,m,t,end_i,end_j,start_i,start_j;
int d[4][2]={{1,0},{0,1},{0,-1},{-1,0}};
int flag=0;
void dfs(int x,int y,int step){
if(flag==1)
return ;
if(step>t)
return ;
if(arr[x][y]=='D'){
if(t==step)
flag=1;
return ;
}
for(int i=0;i<4;i++){
int dx= x+d[i][0];
int dy= y+d[i][1];
if(dx>=0&&dy>=0&&dx<n&&dy<m&&arr[dx][dy]!='X'&&mark[dx][dy]==0)
{
mark[dx][dy]=1;
dfs(dx,dy,step+1);
mark[dx][dy]=0;
}
}
}
int main()
{
while(cin>>n>>m>>t){
flag=0;
memset(mark,0,sizeof(mark));
if(n==0&&m==0&&t==0)
break;
for(int i=0;i<n;i++)
scanf("%s",&arr[i]);
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(arr[i][j]=='S')
{
mark[i][j]=1;
dfs(i,j,0); }
}
}
if(flag==1){
cout<<"YES"<<endl;
}
else cout<<"NO"<<endl;
}
return 0;
}

H - Tempter of the Bone DFS的更多相关文章

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

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

  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. Tempter of the Bone(dfs奇偶剪枝)

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

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

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

  5. zoj 2110 Tempter of the Bone (dfs)

    Tempter of the Bone Time Limit: 2 Seconds      Memory Limit: 65536 KB The doggie found a bone in an ...

  6. hdu1010 Tempter of the Bone —— dfs+奇偶性剪枝

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1010 Tempter of the Bone Time Limit: 2000/1000 MS (Ja ...

  7. HDOJ.1010 Tempter of the Bone (DFS)

    Tempter of the Bone [从零开始DFS(1)] 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双重DFS HDOJ.1010 Tem ...

  8. M - Tempter of the Bone(DFS,奇偶剪枝)

    M - Tempter of the Bone Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & % ...

  9. HDU 1010 Tempter of the Bone(DFS+奇偶剪枝)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1010 题目大意: 输入 n m t,生成 n*m 矩阵,矩阵元素由 ‘.’ 'S' 'D' 'X' 四 ...

随机推荐

  1. github本地提交代码到远程仓库

    1.git工作状态: Workspace: 工作区  :等于平时放代码的地方 Index / Stage: 暂存区,临时存放你的改动,它只是一个文件,保存即将提交到文件列表信息 Repository: ...

  2. [JVM教程与调优] 什么是JVM运行时参数?

    我们接着上一章节[JVM教程与调优] JVM都有哪些参数类型?的内容继续讲解,这章我们来介绍一下:如何查看JVM运行时参数.这一点十分重要,因为我们在进行JVM参数调优的时候,我们首先得知道目前系统运 ...

  3. Springboot 事务注解--- @Transactional

    spring boot @Transactional事物处理    spring boot 添加事物使用 @Transactional注解 简单使用 在启动类上方添加 @EnableTransacti ...

  4. Eclipse无法查看第三方jar包源代码解决

    我在csdn写了过了:https://blog.csdn.net/weixin_40404606/article/details/105174820

  5. spring中BeanPostProcessor之一:InstantiationAwareBeanPostProcessor(01)

    在spring中beanPostProcessor绝对是开天辟地的产物,给了程序员很多自主权,beanPostProcessor即常说的bean后置处理器. 一.概览 先来说下Instantiatio ...

  6. Ruby学习计划-(0)前言

      前言   接触过的编程语言现在来说有C.C++.Java.Object-C.Swift.这几门语言中最熟悉的就是oc了,毕竟靠他吃饭,对于其他几门语言都是初入门径而已,由于本身一直从事iPhone ...

  7. SWUSTOJ 509B 恶心了几个月想不通的low题

    SWUSTOJ 509B 这个题恶心了我好久,细细算来不难,算总天数,减去星期一,与4取余, 问题在最后除掉多余的星期一,按照上述算法,在最后一个星期会出现过了星期一但不足7天,程序未能减去多余的星期 ...

  8. docker下搭建nginx

    一.拉取nginx镜像 # docker pull nginx 等待下载完成后,我们就可以在本地镜像列表里查到 REPOSITORY 为 nginx 的镜像. 二.运行容器 以下命令使用 NGINX ...

  9. ssh 解决经常断开与记住密码功能

    一.解决ssh经常自动断开问题 修改 /etc/ssh/sshd_config 其中对应项为 ClientAliveInterval 30 ClientAliveCountMax 3 表示每30秒发一 ...

  10. PTA | 1008 数组元素循环右移问题 (20分)

    一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0 A1--AN-1)变换为(AN-M -- AN-1 A0 ...