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

题意:

老鼠需要跑出迷宫,在每个位置停留1s,入口是S(老鼠一开始在这里),需要在T时刻正好跑到D位置(出口)。求老鼠能不能成功逃脱。



一开始我没有用剪枝,果断超时。

还有,好久没用c语言A题了,char输入时~回车绞了我半小时的思维。。

奇偶性剪枝有关内容大家可以百度搜下,我就不写了,我是自己推出来的,和有些版本不一样。

#include <stdio.h>
#include <string.h>
char map[10][10];
int df[10][10];
int sx,sy,dx,dy;
int ans,flag,t,x,y;
void dfs(int xd,int yd,int c){
//printf("%d %d %d %d\n",xd,yd,c,flag);
if(xd<0||yd<0){
return;
}
int b=t-c;
if((xd%2==0&&yd%2!=0)||(xd%2!=0&&yd%2==0)){
if(b%2!=0){
if(!((dx%2==0&&dy%2==0)||(dx%2!=0&&dy%2!=0))){
return;
}
}else{
if(!((dx%2!=0&&dy%2==0)||(dx%2==0&&dy%2!=0))){
return;
}
}
}else{
if(b%2==0){
if(!((dx%2==0&&dy%2==0)||(dx%2!=0&&dy%2!=0))){
return;
}
}else{
if(!((dx%2!=0&&dy%2==0)||(dx%2==0&&dy%2!=0))){
return;
}
}
}
if(map[xd][yd]=='X'||df[xd][yd]||flag){
return;
}
if(c>t){
return;
} if(c==t&&dx==xd&&dy==yd){
flag=1;
return;
} df[xd][yd]=1;
dfs(xd-1,yd,c+1);
dfs(xd,yd-1,c+1);
dfs(xd+1,yd,c+1);
dfs(xd,yd+1,c+1);
df[xd][yd]=0;
} int main(){
while(scanf("%d%d%d",&x,&y,&t),x||y||t){
memset(df,0,sizeof(df));
int i,j;
ans=0;
flag=0;
for(i=0;i<10;i++){
for(j=0;j<10;j++){
map[i][j]='X';
}
}
getchar();
for(i=0;i<x;i++){
for(j=0;j<y;j++){
scanf("%c",&map[i][j]);
if(map[i][j]=='S'){
sx=i;sy=j;
}else if(map[i][j]=='D'){
dx=i;dy=j;ans++;
}else if(map[i][j]=='.'){
ans++;
}
}
getchar();
}
// printf("%d %d\n",ans,t);
if(ans<t){
printf("NO\n");
continue;
}
dfs(sx,sy,0);
if(flag){
printf("YES\n");
}else{
printf("NO\n");
}
// printf("%d",flag);
}
return 0;
}

HDOJ/HDU Tempter of the Bone(深搜+奇偶性剪枝)的更多相关文章

  1. hdu 1010 Tempter of the Bone 深搜+剪枝

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

  2. HDOJ/HDU 1242 Rescue(经典BFS深搜-优先队列)

    Problem Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is ...

  3. hdu1010 Tempter of the Bone(深搜+剪枝问题)

    Tempter of the Bone Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission( ...

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

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

  5. 【笔记】「pj复习」深搜——简单剪枝

    深搜--简单剪枝 说在最前面: 因为马上要 NOIP2020 了,所以菜鸡开始了复习qwq. pj 组 T1 ,T2 肯定要拿到满分的,然后 T3 , T4 拿部分分, T3 拿部分分最常见的做法就是 ...

  6. hdu 1010 Tempter of the Bone(深搜+奇偶剪枝)

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

  7. HDU 1010 Temper of the bone(深搜+剪枝)

    Tempter of the Bone Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) ...

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

  9. hdoj 1010 Tempter of the Bone【dfs查找能否在规定步数时从起点到达终点】【奇偶剪枝】

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

随机推荐

  1. UVA 11584 Paritioning by Palindromes(动态规划 回文)

    题目大意:输入一个由小写字母组成的字符串,你的任务是把它划分成尽量少的回文串.比如racecar本身就是回文串:fastcar只能分成7个单字母的回文串:aaadbccb最少可分成3个回文串:aaa. ...

  2. iframe 的基本操作

    要在服务器环境下才行 1.iframe 下操作父页面window.parent.document.getElementById //全部支持window.top //最顶层ie 下的iframe的on ...

  3. 【自用代码】Json转对象

    private static object JsonToObject(string jsonString, object obj) { var serializer = new DataContrac ...

  4. 做个无边框winform窗体,并美化界面

    今天下午程序写完,有些时间就搞下界面美化,做个无框窗体.首先把窗体的FormBorderStyle设置为None,就变成无框的啦,不过你会发现这样窗体上就没有原来的最大最小化和关闭按钮了哦,所以要自己 ...

  5. 不同版本PHP之间cURL的区别(-经验之谈)

    之前在做一个采集的工具,实现采集回来的文章,图片保存起来.文章内容是保存在数据库,图片是先需要上传到图片服务器,再返回图片地址,替换掉文章的图片地址. 问题来了:都能成功采集都东西,但是,本地测试是正 ...

  6. php设计模式笔记:单例模式

    php设计模式笔记:单例模式 意图: 保证一个类仅有一个实例,并且提供一个全局访问点 单例模式有三个特点: 1.一个类只有一个实例2.它必须自行创建这个实例3.必须自行向整个系统提供这个实例 主要实现 ...

  7. SORT_AREA_RETAINED_SIZE

    manual pga: SORT_AREA_RETAINED_SIZE specifies (in bytes) the maximum amount of the user global area ...

  8. 例行性工作排程 (crontab)

    1. 什么是例行性工作排程 1.1 Linux 工作排程的种类: at, crontab 1.2 Linux 上常见的例行性工作2. 仅运行一次的工作排程 2.1 atd 的启动与 at 运行的方式: ...

  9. APNs-远程推送

    一.开发iOS程序的推送功能, iOS端需要做的事 1.请求苹果获得deviceToken 2.得到苹果返回的deviceToken 3.发送deviceToken给公司的服务器 4.监听用户对通知的 ...

  10. delphi xe5 android 调用照相机获取拍的照片

    本篇文章我们来看一下delphi xe5 在android程序里怎样启动照相机并获取所拍的照片,本代码取自xe自带打sample,路径为: C:\Users\Public\Documents\RAD ...