B - Tempter of the Bone(DFS+剪枝)
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+剪枝)的更多相关文章
- HDU1010:Tempter of the Bone(dfs+剪枝)
http://acm.hdu.edu.cn/showproblem.php?pid=1010 //题目链接 http://ycool.com/post/ymsvd2s//一个很好理解剪枝思想的博客 ...
- 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 ...
- HDU 1010 Tempter of the Bone --- DFS
HDU 1010 题目大意:给定你起点S,和终点D,X为墙不可走,问你是否能在 T 时刻恰好到达终点D. 参考: 奇偶剪枝 奇偶剪枝简单解释: 在一个只能往X.Y方向走的方格上,从起点到终点的最短步数 ...
- 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 ...
- Tempter of the Bone(dfs奇偶剪枝)
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- M - Tempter of the Bone(DFS,奇偶剪枝)
M - Tempter of the Bone Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & % ...
- 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 ...
- HDOJ.1010 Tempter of the Bone (DFS)
Tempter of the Bone [从零开始DFS(1)] 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双重DFS HDOJ.1010 Tem ...
- 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 ...
随机推荐
- Hive 填坑指南
Hive 填坑指南 目录 Hive 填坑指南 数据表备份 数据表备份 方法1:create table 表名_new as select * from 原表 create table 表名_new a ...
- Cloud Alibabab笔记问世,全网详解仅此一份手慢无
转: Cloud Alibabab笔记问世,全网详解仅此一份手慢无 什么是Spring cloud alibaba Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案, ...
- 49元起!魅族Lipro LED灯泡发布:无可视频闪、无积热问题
转: 49元起!魅族Lipro LED灯泡发布:无可视频闪.无积热问题 魅族智能家居品牌Lipro今日办会,公布一批新品,均面向健康照明领域打造. 魅族强调,Lipro健康照明产品主打博物馆级健康光. ...
- 聊聊Dotnet的垃圾回收
最近在做一个项目,用到了大量的非托管技术,所以垃圾回收变得很重要. 在说垃圾回收之前,先说说两个概念: 托管代码,是由CLR管理的代码 非托管代码,是由操作系统直接执行的代码 在早期C++的时候, ...
- XAPKInstaller - XAPK游戏包安装器
XAPKInstaller 一个用于安装XAPK游戏包的安装器. 程序需要读写存储与获取已安装应用权限才可正常运行. 长按条目可显示文件的详细信息. SDK小于24(Android N)的设备会显示应 ...
- MySQL使用入门--初识数据库
MySQL使用入门 数据库概述 数据库是存放数据的仓库.在应用的开发中总是离不开数据的查询.处理.存储,例如图书管理系统就需要操纵和存储大量的数据.没有数据库之前我们使用文件存储数据,但是文件存储有很 ...
- 关于,java-webservice接口,根据服务端,自动生成客户端调用时,响应时间慢
我这边遇到的问题,是在和对方进行webservice接口交互的时候,用工具,调用对方的webservice接口,对方响应很快.但是用java生成的客户端调用就会很慢才得到响应.大概有5分钟左右. 这里 ...
- WPF 应用 - 图表 LiveCharts
引用:LiveCharts,LiveCharts.Wpf 1. 示例 折线图 <Window ... xmlns:lvc="clr-namespace:LiveCharts.Wpf;a ...
- Java中的名称命名规范:
Java中的名称命名规范:(不遵守,也不会出现编译的错误) 包名:多单词组成时所有字母都小写:xxxyyyzzz 类名.接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz 变量名.方法名: ...
- Linux系统浮动IP的配置
什么是浮动IP,为什么要配置浮动IP 首先说一下为什么要配置浮动IP. 原文链接:https://blog.csdn.net/readiay/article/details/53538085 现在有一 ...