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. 

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

学到了剪枝的一些知识。

AC代码

 1 #include<iostream>
2 #include<cstring>
3 #include<algorithm>
4 #define N 10
5
6 using namespace std;
7
8 int n,m,t,end_i,end_j;
9 bool visited[N][N],flag,ans;
10 char mapp[N][N];
11
12 int abs(int a,int b)
13 {
14 if(a<b) return b-a;
15 else return a-b;
16 }
17
18 void DFS(int i,int j,int c)
19 {
20 if(flag) return ;
21 if(c>t) return ;
22 if(i<0||i>=n||j<0||j>=m) {return ;}
23 if(mapp[i][j]=='D'&&c==t) {flag=ans=true; return ;}
24 int temp=abs(i-end_i)+abs(j-end_j);
25 temp=t-temp-c;
26 if(temp&1) return ;//奇偶剪枝
27
28 if(!visited[i-1][j]&&mapp[i-1][j]!='X')
29 {
30 visited[i-1][j]=true;
31 DFS(i-1,j,c+1);
32 visited[i-1][j]=false;
33 }
34 if(!visited[i+1][j]&&mapp[i+1][j]!='X')
35 {
36 visited[i+1][j]=true;
37 DFS(i+1,j,c+1);
38 visited[i+1][j]=false;
39 }
40 if(!visited[i][j-1]&&mapp[i][j-1]!='X')
41 {
42 visited[i][j-1]=true;
43 DFS(i,j-1,c+1);
44 visited[i][j-1]=false;
45 }
46 if(!visited[i][j+1]&&mapp[i][j+1]!='X')
47 {
48 visited[i][j+1]=true;
49 DFS(i,j+1,c+1);
50 visited[i][j+1]=false;
51 }
52 }
53
54 int main()
55 {
56 int i,j,x,y,k;
57 while(cin>>m>>n>>t&&(m||n||t))
58 {
59 memset(visited,false,sizeof(visited));
60 k=0;
61 for(i=0;i<n;i++)
62 {
63 for(j=0;j<m;j++)
64 {
65 cin>>mapp[i][j];
66 if(mapp[i][j]=='S')
67 {
68 x=i;y=j;
69 visited[i][j]=true;
70 }
71 if(mapp[i][j]=='D')
72 {
73 end_i=i;end_j=j;
74 }
75 if(mapp[i][j]=='X')k++;
76 }
77 }
78 ans=flag=false;
79 if(n*m-k-1>=t) DFS(x,y,0);
80 if(ans) cout<<"YES"<<endl;
81 else cout<<"NO"<<endl;
82 }
83 return 0;
84 }

B - Tempter of the Bone(DFS+剪枝)的更多相关文章

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

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

  2. Tempter of the Bone dfs+剪枝

    The doggie found a bone in an ancient maze, which fascinated him a lot. However, when he picked it u ...

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. MySQL如何搭建主库从库(Docker)

    目录 MySQL主从搭建 一.主从配置原理 二.操作步骤 1.创建主库和从库容器 2.启动主从库容器 3.远程连接并操作主从库 4.测试主从同步 MySQL主从搭建 一.主从配置原理 mysql主从配 ...

  2. JavaScript 模拟 sleep

    用 JS 实现沉睡几秒后再执行,有好几种方式,但都不完美,以下是我感觉比较好的一种方式 function sleep(time) { return new Promise((resolve) => ...

  3. 利用Visual Studio调试JavaScript脚本

    方法1: 方法2: 打开IE,按F12调试. 方法3: JS断电点debugger代替

  4. 8.Vue组件三---slot插槽

    主要内容:  1. 什么是插槽 2. 组件的插槽 3. 插槽的使用方法 4. 插槽的具名 5. 变量的作用域 6. slot的作用域 一. 什么是插槽呢? 1. 生活中的插槽有哪些呢? usb插槽, ...

  5. 将MacOS Catalina 降级为 Mojave

    1.下载Mojave https://apps.apple.com/cn/app/macos-mojave/id1398502828?ls=1&mt=12 2.更改U盘格式和名称 3.制作U盘 ...

  6. DatePicker 多时间粒度选择器组件

    使用方法: 在.vue文件引入 import ruiDatePicker from '@/components/rattenking-dtpicker/rattenking-dtpicker.vue' ...

  7. Java的特性和优势以及不同版本的分类,jdk,jre,jvm的联系与区别,javadoc的生成

    Java 1.Java的特性和优势 Write Once,Run Anywhere 简单性 面向对象 可移植性 高性能 分布式 动态性 多线程 安全性 健壮性 2.Java的三大版本 JavaSE:标 ...

  8. mysql 统计新增每天数据

    #创建基表 CREATE TABLE `table_sum` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `table_name` varchar(50) ...

  9. VUE移动端音乐APP学习【四】:scroll组件及loading组件开发

    scroll组件 制作scroll 组件,然后嵌套一个 DOM 节点,使得该节点就能够滚动.该组件中需要引入 BetterScroll 插件. scroll.vue: <template> ...

  10. 2.掌握numpy数组

    一.改变数组形态 reshape()--通过改变数组的维度改变数组形态 import numpy as np Array=np.arange(1,17,1) Array Array_1=np.aran ...