http://acm.hdu.edu.cn/showproblem.php?pid=1010

题目大意从S出发,问能否在时间t的时候到达终点D,X为障碍

需要注意的是要恰好在t时刻到达,而不是在t时间之内

深搜,注意剪枝 剩下格子大于t时间的时候剪掉这个很好想,但还是会超时,还有一个剪枝是依靠

奇偶性剪枝

比如地图依靠奇偶性是;

0 1 0 1 0 1
1 0 1 0 1 0
0 1 0 1 0 1
1 0 1 0 1 0
0 1 0 1 0 1 可以发现偶数走一步一定到奇数,奇数走一步一定到偶数,所以当所在地的奇偶性与目的地D不一样的时候
一定走奇数步子,一样就走偶数步,判断这个来剪枝

code

 #include <stdio.h>
#include <stdlib.h>
bool flag;
int n,m,t,i,j,x1,y1,x2,y2,num;
int dix[]={,,,-};
int diy[]={,,-,};
char str[][];
void DFS(int k,int l,int tc)
{
int i;
if(tc==t && k==x2 &&l==y2)
flag=true;
if(flag==true) return;
if (abs(x2-k)+abs(y2-l)>t-tc)return ; //两个回溯
if((abs(x2-k)+abs(y2-l))%!=(t-tc)%) return;
for(i=;i<;i++)
{
int dx=k+dix[i];
int dy=l+diy[i];
if(dx>= && dx<n && dy>= && dy<m && str[dx][dy]!='X')
{
str[dx][dy]='X';
DFS(dx,dy,tc+);
str[dx][dy]='.';
}
}
}
int main()
{
while (scanf("%d %d %d",&n,&m,&t))
{
getchar();
if(n==&&m==&&t==)
break;
num=;
flag=false;
for(i=;i<n;i++)
{
for(j=;j<m;j++)
{
scanf("%c",&str[i][j]);
if(str[i][j]=='S')
{
x1=i;y1=j;
}
else if(str[i][j]=='D')
{
x2=i;y2=j;
num++;
}
else if(str[i][j]=='.')
{
num++;
}
}
getchar();
}
str[x1][y1]='X';
if(num>=t)
DFS(x1,y1,);
if(flag==true)
printf("YES\n");
else
printf("NO\n");
}
return ;
}

hdu 1010(DFS) 骨头的诱惑的更多相关文章

  1. HDU 1010 (DFS搜索+奇偶剪枝)

    题目链接:  http://acm.hdu.edu.cn/showproblem.php?pid=1010 题目大意:给定起点和终点,问刚好在t步时能否到达终点. 解题思路: 4个剪枝. ①dep&g ...

  2. hdu 1010 dfs搜索

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

  3. Tempter of the Bone HDU 1010(DFS+剪枝)

    Problem Description The doggie found a bone in an ancient maze, which fascinated him a lot. However, ...

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

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

  5. hdu 1010 Tempter of the Bone 奇偶剪枝

      如果所给的时间(步数) t 小于最短步数path,那么一定走不到. 若满足t>path.但是如果能在恰好 t 步的时候,走到出口处.那么(t-path)必须是二的倍数. 关于第二种方案的解释 ...

  6. HDU 5143 DFS

    分别给出1,2,3,4   a, b, c,d个 问能否组成数个长度不小于3的等差数列. 首先数量存在大于3的可以直接拿掉,那么可以先判是否都是0或大于3的 然后直接DFS就行了,但是还是要注意先判合 ...

  7. Snacks HDU 5692 dfs序列+线段树

    Snacks HDU 5692 dfs序列+线段树 题意 百度科技园内有n个零食机,零食机之间通过n−1条路相互连通.每个零食机都有一个值v,表示为小度熊提供零食的价值. 由于零食被频繁的消耗和补充, ...

  8. HDU 1010 Tempter of the Bone 骨头诱惑(DFS+剪枝)

    题意: 必须在第t秒走到格子D上,S为起点,D为终点,点就是可以走,X就是墙. 思路: 将迷宫外围四面都筑墙‘X’.深度搜索+奇偶剪枝,再加一个剪枝“无法在指定时间内到达”. #include < ...

  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. 新闻推荐系统:基于内容的推荐算法(Recommender System:Content-based Recommendation)

    https://blog.csdn.net/qq_32690999/article/details/77434381 因为开发了一个新闻推荐系统的模块,在推荐算法这一块涉及到了基于内容的推荐算法(Co ...

  2. git---远程仓库版本回滚

    开发中,发现有错误版本提交带远程分支master,怎么处理? 1 简介 最近在使用git时遇到了远程分支需要版本回滚的情况,于是做了一下研究,写下这篇博客. 2 问题 如果提交了一个错误的版本,怎么回 ...

  3. Centos7永久修改hostname

    hostnamectl set-hostname hdp-01 centos7中除了修改hosts文件和network文件后,还需修改etc/hostname文件,具体步骤如下 第一步:修改/etc/ ...

  4. python 函数的定义及传参

    函数是一个通用的程序结构部件,是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 定义一个简单的函数: >>> def test(a): #创建一个函数,函数名是test ...

  5. div 绑定keyup

    参考 https://www.cnblogs.com/Struts-pring/p/4290740.html <div tabindex="-1" onkeyup=" ...

  6. jumpserver-1.4.0.2

    关闭防火墙和selinux IP:192.168.199.115 一. 准备 Python3 和 Python 虚拟环境 yum -y install wget sqlite-devel xz gcc ...

  7. Android四大组件总结

    1:Actiivty 用户可以看见并可以操作的界面 Activity开启方式:startActivityForResult :startActivity Activity生命周期: onCreate  ...

  8. mysql中插入序列表

    利用序列表来实现列转行:CREATE TABLE sequence(id INT UNSIGNED NOT NULL auto_increment PRIMARY KEY)往里面插入数据 INSERT ...

  9. 【Linux 线程】常用线程函数复习《一》

    1.pthread_create以及pthread_self函数 /****************************************************************** ...

  10. 总结函数open与fopen的区别

    转自:https://www.zybuluo.com/yiltoncent/note/87461 对于这两个名字很类似的函数,对于很多初学者来说,不容易搞清楚它们有什么不同,只知道按照函数用法使用.如 ...