HDU 1010

  题目大意:给定你起点S,和终点D,X为墙不可走,问你是否能在 T 时刻恰好到达终点D。

  参考: 奇偶剪枝

  奇偶剪枝简单解释:

    在一个只能往X、Y方向走的方格上,从起点到终点的最短步数为T1,并记其他任意走法所需步数为T2,则T2-T1一定为偶数。

    即若某一点到终点的最短步数为T1,且T3-T1为奇数,则一定无法话费T3步恰好到达终点。

/*HDU 1010 ------ Tempter of the Bone DFS*/
#include <cstdio>
#include <cstring> int m, n, t, startx, starty, endx, endy;
char mapp[][];
bool visit[][], ans, flag; /*求a-b的绝对值*/
int abs(int a, int b){
if (a < b)
return b - a;
else
return a - b;
} /*搜索从i,j处走走到出口的结果 i j为横纵坐标 c为当前已走步数*/
void DFS(int i, int j, int c){
if (flag || c > t || i <= || i > n || j <= || j > m)
return;
if (mapp[i][j] == 'D' && c == t){
ans = flag = ;
return;
}
int tmp = abs(i, endx) + abs(j, endy); //最短可到距离
tmp = t - c - tmp; //t-c为剩余可走步数 减去最短距离为 剪纸
if (tmp & ) //若剪枝后tmp为奇数 一定不可到达
return; //左边的点可以访问
if (!visit[i - ][j] && mapp[i - ][j] != 'X'){
visit[i - ][j] = true;
DFS(i - , j, c + );
visit[i - ][j] = false;
}
//右边的点可以访问
if (!visit[i + ][j] && mapp[i + ][j] != 'X'){
visit[i + ][j] = true;
DFS(i + , j, c + );
visit[i + ][j] = false;
}
//上边的点可以访问
if (!visit[i][j - ] && mapp[i][j - ] != 'X'){
visit[i][j - ] = true;
DFS(i, j - , c + );
visit[i][j - ] = false;
}
//下边的点可以访问
if (!visit[i][j + ] && mapp[i][j + ] != 'X'){
visit[i][j + ] = true;
DFS(i, j + , c + );
visit[i][j + ] = false;
}
} int main()
{
//n行m列t步
while (scanf("%d%d%d", &n, &m, &t) == && (m + n + t)){
int k = ;
memset(visit, , sizeof visit);
//i,j取1是为了判别时数组不越界
for (int i = ; i <= n; ++i){
scanf("%s", mapp[i]+);
for (int j = ; j <= m; ++j){
if (mapp[i][j] == 'X'){
++k; //记录墙的数量
}
else if (mapp[i][j] == 'S'){
startx = i; //记录起始点
starty = j;
visit[i][j] = true;
}
else if (mapp[i][j] == 'D'){
endx = i; //记录终点
endy = j;
}
}//for(j)
}//for(i) ans = flag = ;
if (n*m - k - >= t) //总数-墙-起点 需大于等于 步数
DFS(startx, starty, );
if (ans)
printf("YES\n");
else
printf("NO\n");
} return ;
}

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

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

  2. HDU 1010 Tempter of the Bone(DFS+奇偶剪枝)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1010 题目大意: 输入 n m t,生成 n*m 矩阵,矩阵元素由 ‘.’ 'S' 'D' 'X' 四 ...

  3. hdu - 1010 Tempter of the Bone (dfs+奇偶性剪枝) && hdu-1015 Safecracker(简单搜索)

    http://acm.hdu.edu.cn/showproblem.php?pid=1010 这题就是问能不能在t时刻走到门口,不能用bfs的原因大概是可能不一定是最短路路径吧. 但是这题要过除了细心 ...

  4. (step4.3.1) hdu 1010(Tempter of the Bone——DFS)

    题目大意:输入三个整数N,M,T.在接下来的N行.M列会有一系列的字符.其中S表示起点,D表示终点. .表示路 . X表示墙...问狗能有在T秒时到达D.如果能输出YES, 否则输出NO 解题思路:D ...

  5. HDU 1010 Tempter of the Bone DFS(奇偶剪枝优化)

    需要剪枝否则会超时,然后就是基本的深搜了 #include<cstdio> #include<stdio.h> #include<cstdlib> #include ...

  6. HDU 1010 Tempter of the Bone (DFS+可行性奇偶剪枝)

    <题目链接> 题目大意:一个迷宫,给定一个起点和终点,以及一些障碍物,所有的点走过一次后就不能再走(该点会下陷).现在问你,是否能从起点在时间恰好为t的时候走到终点. 解题分析:本题恰好要 ...

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

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

  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. 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. Xcode6.2创建Empty Application

    运行Xcode 6,创建一个Single View Application工程.   创建好后,把工程目录下的Main.storyboard和LaunchScreen.xib删除,扔进废纸篓.   打 ...

  2. iOS-生成国际化包-配置App多语言支持

      标签: ios国际化 ios多语言支持 xcode多语言支持 xcode生成多语言 国际化 it 分类: 功能知识   如果你的App需要支持多国语言.那么,就应该为你的App应用添加“国际化”支 ...

  3. Linux 上的常用文件传输方式介绍与比较

    ftp ftp 命令使用文件传输协议(File Transfer Protocol, FTP)在本地主机和远程主机之间或者在两个远程主机之间进行文件传输. FTP 协议允许数据在不同文件系统的主机之间 ...

  4. 转:Python时间戳和日期的相互转换

    当前时间戳:time.time() 当前日期:time.ctime() 1.Python下日期到时间戳的转换 import datetime import time dateC=datetime.da ...

  5. PED结构获取进程路径和命令行地址

    1.FS寄存器 2.进入FS寄存器地址,7FFDD000 3.偏移30为PED结构 4.偏移地址10 3C,44偏移:路径地址,命令行地址 // 通过PEB结构去查找所有进程模块 void *PEB ...

  6. JSP重定向传递参数

    我一个JSP程序,要实现前台提交数据给后台处理后,后台jsp自动跳转到另一个jsp页面,这种方式也叫重定向,重定向的方法有多种,暂时我试过的并且能成功的有两个: 一种是用 response.sendR ...

  7. hdu 2085

    PS:递推题..  a[n]=a[n-1]*3+2*b[n-1]  b[n]=a[n-1]+b[n-1] 代码: #include "stdio.h" ]; ]; int main ...

  8. android的 makefile里 的常用 宏定义

    在Android编译框架中,把许多固定的.反复用到的目录路径定义为 宏变量,常用 宏 如下: out/target/product/xxx的宏即为:PRODUCT_OUT out/target/pro ...

  9. go 函数

    GO 程序设计   函数 1.新的数据类型 mytype 用户可以根据自身需要定义新的数据类型,下面的mytype就是新定义的数据类型,其中第二个是一个结构体,结构体在go语言中是非常有用的数据类型, ...

  10. Node.js +Express+MongoDB+mogoose+ejs+bootstrap+jquery

    Node.js + MongoDB 项目实战(二)  创建项目 在项目实战(一)中,已经配置好了开发环境(详见:http://www.cnblogs.com/jameslong/articles/34 ...