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. zabbix Python3管理

    import requests import json import os # user config here ip = '192.168.52.130' user = "root&quo ...

  2. 区分函数防抖&函数节流

    1. 概念区分 函数防抖:触发事件后,在n秒内函数只能执行一次,如果触发事件后在n秒内又触发了事件,则会重新计算函数延执行时间. 简单说: 频繁触发, 但只在特定的时间内才执行一次代码,如果特定时间内 ...

  3. Elasticsearch精进之路:elasticsearch-head插件使用教程

    一.elasticsearch-head插件的作用 ealsticsearch是一个分布式.RESTful 风格的搜索和数据分析引擎,所有的数据都是后台服务存储着,类似于Mysql服务器,因此如果我们 ...

  4. 创建一个scrapy爬虫框架的项目

    第一步:打开pycharm,选择"terminal",如图所示: 第二步:在命令中端输入创建scrapy项目的命令:scrapy startproject demo (demo指的 ...

  5. 那些你不知道的DOU+投放技巧,以及常见的审核失败原因丨国仁网络

    作为小额付费投放工具,DOU+一直深受各大中小商家的青睐.虽然它的审核比较严格,但转化效果还是非常明显的. 近日,抖音发布重要公告:内容低质的视频将无法购买DOU+推广,并可能因违反平台规则导致无法观 ...

  6. 通达OA 任意文件上传-2013/2015版本

    参考 http://wiki.0-sec.org/0day/%E9%80%9A%E8%BE%BEoa/11.html 影响版本 2013版本 2015版本 漏洞文件 general/vmeet/wbU ...

  7. 从零学脚手架(三)---webpack属性详解

    如果此篇对您有所帮助,在此求一个star.项目地址: OrcasTeam/my-cli 在上一篇中,介绍了webpack的entry.output.plugins属性. 在这一篇,接着介绍其它配置属性 ...

  8. WPF 应用 - 图表 LiveCharts

    引用:LiveCharts,LiveCharts.Wpf 1. 示例 折线图 <Window ... xmlns:lvc="clr-namespace:LiveCharts.Wpf;a ...

  9. 微软跨平台UI框架MAUI真的要来啦

    .NET 6 preview已经上线,是时候为在BUILD 2020上宣布的新.NET Multi-platform App UI(MAUI)做准备了.对于客户端应用程序开发人员来说,这一年.NET有 ...

  10. 「NOIP模拟赛」Round 3

    Tag 计数+LIS, 二分+ST表, 计数+记搜 A. 改造二叉树 Description 题面 Solution 如果目标序列非严格递增,或者说目标序列是不下降的,那么答案就是 \(n\) 减去最 ...