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

用到了奇偶剪枝:

0 1 0 1

1 0 1 0          如图,设起点为s,终点为e,s->e的最短步数为t.   sum=t+extra. [因为extra无论怎么走,最终都要返回其中一条最短路径上,即有来回,所以extra=2*某个数,一定是偶数。

0 1 0 1

1 0 1 0

【所以此题中,v-step表示还可以走多少步,abs(x-x2)+abs(y-y2)为此刻点到终点位置,由上面剪枝分析,两者之差一定为偶数。所以根据小学数学,奇-奇=偶,偶-偶=偶,可知两数奇偶性相同(有用吗)】

 #include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define mem(a) memset(a,0,sizeof(a))
#define ll long long
int fa[][]={{,},{,-},{,},{-,}};
int n,m,v;
char mo[][];
int mark[][];
int ans,x1,x2,y3,y2;
int coun;
int abs(int a)
{
if (a<) return -a;
return a;
}
void dfs(int x,int y,int step)
{
if(ans) return ;
if(x==x2&&y==y2&&step==v) {ans=;return ;}
int v1=v-step-(abs(x-x2)+abs(y-y2));
if(v1<||v1&)
return ;
for(int i=;i<;i++)
{
int xx=x+fa[i][];
int yy=y+fa[i][];
if(xx>=&&xx<n&&yy>=&&yy<m&&mark[xx][yy]==&&mo[xx][yy]!='X')
{
mark[xx][yy]=;
dfs(xx,yy,step+);
if(ans) return ;
mark[xx][yy]=;
}
}
return ;
}
int main()
{
while(~scanf("%d%d%d",&n,&m,&v)&&(n||m||v))
{
ans=coun=;
mem(mark);
for(int i=;i<n;i++)
scanf("%s",mo[i]);
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
if(mo[i][j]=='S')
{x1=i;y3=j;}
if(mo[i][j]=='D')
{x2=i;y2=j;}
if(mo[i][j]=='X')
coun++;
}
}
if(v>n*m-coun-)
{
printf("NO\n");
continue;
}
mark[x1][y3]=;
dfs(x1,y3,);
if(ans==)printf("YES\n");
else printf("NO\n");
}
return ;
}

DFS Tempter of the Bone的更多相关文章

  1. DFS:Tempter of the Bone (规定时间达到规定地点)

    解题心得: 1.注意审题,此题是在规定的时间达到规定的地点,不能早到也不能晚到.并不是最简单的dfs 2.在规定时间达到规定的地点有几个剪枝: 一.公式:所需的步骤 - x相差行 - y相差列 = 偶 ...

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

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

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

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

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

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

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

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

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

  8. ZOJ 2110 Tempter of the Bone(条件迷宫DFS,HDU1010)

    题意  一仅仅狗要逃离迷宫  能够往上下左右4个方向走  每走一步耗时1s  每一个格子仅仅能走一次且迷宫的门仅仅在t时刻打开一次  问狗是否有可能逃离这个迷宫 直接DFS  直道找到满足条件的路径 ...

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

随机推荐

  1. 【MySql】like用法

    LIKE用法 SELECT * FROM TABLE WHERE col Like '%a';//检索以a结尾的内容 SELECT * FROM TABLE WHERE col Like '%a%'; ...

  2. sench touch 时间插件 扩展

    因项目 需要  老项目需要用到  时分  的插件  而本身sencha  touch  自己木有这个功能,因此在网上找到了 一个可以扩展的插件. 相关目录复制如下代码: /** * The picke ...

  3. MySQL外键使用详解

    一.基本概念 1.MySQL中“键”和“索引”的定义相同,所以外键和主键一样也是索引的一种.不同的是MySQL会自动为所有表的主键进行索引,但是外键字段必须由用户进行明确的索引.用于外键关系的字段必须 ...

  4. SQLmap注入启发式检测算法

    1.经过setTargetEnv()就进入了checkWaf()的环节 def checkWaf():     """     Reference: http://sec ...

  5. ATM机模拟系统

    实验要求 https://pan.baidu.com/s/1Sq5joWyVsNhY8DYiyI4UmQ 源代码 /*信1705-1 20173458 王嘉梁*/ package atm; impor ...

  6. time与datetime模块

    在python中,通常用下面几种方式来表示时间: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量. 格式化的时间字符串(format s ...

  7. Jmeter中常用的一些对字符串的处理

    1)截取部分线程组的名称 group = ctx.getThreadGroup(); // 获取当前线程组 str = group.getName(); // 获取线程组的名称 str = str.s ...

  8. last与lastb命令 读取的日志文件

    在linux系统中,last与lastb命令用来列出目前与过去登录系统的用户相关信息.指令英文原义: last, lastb - show listing of last logged in user ...

  9. 安装和配置bazel

    2018-12-26 21:56:23 编译和移植tensorflow的C/C++源码时,用到bazel这一构建工具.本篇blog记录遇到的安装.配置问题. 吐槽 构建工具,从make/ant/cma ...

  10. python---实现多个有序列表的合并

    我觉得不用抄书上的代码. 遇到实现问题,应该结合python本身的功能去解决. 比如,当合并有序列表时,为什么一定要一项一项比较,而不是使用list的sort函数呢? # coding = utf-8 ...