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

否则输出NO

解题思路:DFS+剪枝

代码如下:

/*
* 1010_3.cpp
*
* Created on: 2013年8月16日
* Author: Administrator
*/ #include <iostream> using namespace std; bool flag;
int N, M, T;
int si, sj;
int ei, ej; const int maxn = 8;
int dir[4][2] = { { 1, 0 }, { -1, 0 }, { 0, 1 }, { 0, -1 } };
char map[maxn][maxn]; bool checkEdge(int x, int y) {
if (!(x < 1 || x > N || y < 1 || y > M)) {
return true;
} return false;
} void dfs(int curX, int curY, int curT) {
if (flag) {//如果找到出口,直接返回
return;
} if (curT > T) {//如果当前花费的时间大于T,就返回
return;
} //花费的时间加上剩余需要的时间若大于T,返回
if (curT + abs(curX - ei) + abs(curY - ej) > T) {
return;
} //若到达出口最短距离和剩余时间的奇偶性不同,返回
if ((abs(curX - ei) + abs(curY - ej)) % 2 != abs(T - curT) % 2) {
return;
} if (curX == ei && curY == ej && curT == T) {
printf("YES\n");
flag = true;
return;
} int i;
for (i = 0; i < 4; ++i) {
int nextX = curX + dir[i][0];
int nextY = curY + dir[i][1]; if (checkEdge(nextX, nextY)) {
if (map[nextX][nextY] != 'X') {
map[nextX][nextY] = 'X';//使其不可达到
dfs(nextX, nextY, curT + 1);
map[nextX][nextY] = '.';//回溯时,恢复原来的状态
}
}
}
}
int main() {
while (scanf("%d%d%d", &N, &M, &T) != EOF, N || M || T) {
getchar();
int k = 0;
int i, j;
flag = false;
memset(map, 0, sizeof(map));
for (i = 1; i <= N; ++i) {
for (j = 1; j <= M; ++j) {
scanf("%c", &map[i][j]); if (map[i][j] == 'S') {
si = i;
sj = j;
map[i][j] = 'X'; //将开始位置置为不可达状态
} else if (map[i][j] == 'D') {
ei = i;
ej = j;
} if (map[i][j] != 'X') {
++k;
}
}
getchar();
} if (k < T) {//若可走的点数小于T,则输出NO
printf("NO\n");
continue;
} dfs(si, sj, 0); if (!flag) {
printf("NO\n");
}
}
}

(step4.3.1) hdu 1010(Tempter of the Bone——DFS)的更多相关文章

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

    HDU 1010 题目大意:给定你起点S,和终点D,X为墙不可走,问你是否能在 T 时刻恰好到达终点D. 参考: 奇偶剪枝 奇偶剪枝简单解释: 在一个只能往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+奇偶剪枝)

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

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

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

  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 奇偶剪枝

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

随机推荐

  1. react.js 你应知道的9件事

    React.js 初学者应该知道的 9 件事   本文假定你已经有了一下基本的概念.如果你不熟悉 component.props 或者 state 这些名词,你最好先去阅读下官方起步和手册.下面的代码 ...

  2. Flask挺好

    很久没写东西了,寒假比较低效,几乎没写代码.只在慕课网上刷完了linux系列课程,现在用linux熟了很多以及看了大部分<鸟叔-linux服务器架设>那本书,虽然对于写代码并没有什么卵用, ...

  3. Linux下安装Oracle 10g(redhat 4)

    --注:本篇文章只装Oracle,并没有建库 一:在虚拟机里装个readhat 4系统 二:配IP 配好之后的IP如下: 三:建用户组,用户 注意:oracle用户应具有相同的uid. groupad ...

  4. ASP.NET c#学习经验

    1.DataGrid自定义字段.<Column  <asp:BoundColumn DataField="khbh" HeaderText="客户编号&quo ...

  5. python3.5文档

    https://docs.python.org/3.5/tutorial/modules.html#packages

  6. javascript访问级别

    JavaScript中没有官方的访问级别语法,JavaScript没有类似于Java语言智能搞得private或protected这样的访问级别关键字,默认情况下,,对象中所有的成员都是公有和可访问的 ...

  7. VS2010 IE10 调试时报“未能将脚本调试器附加到计算机”,已经附加了一个进程

    解决办法:以管理员身份打开CMD,运行:regsvr32.exe "%ProgramFiles(x86)%\Common Files\Microsoft Shared\VS7Debug\ms ...

  8. php异步调用方法实现示例

    php 异步调用方法   客户端与服务器端是通过HTTP协议进行连接通讯,客户端发起请求,服务器端接收到请求后执行处理,并返回处理结果.   有时服务器需要执行很耗时的操作,这个操作的结果并不需要返回 ...

  9. c语言实现BMP图像转换为灰度图

    当初是自己要装X,非要用c来写信息隐藏作业,装了X,就得付出实践.查了好久资料,到期末才把作业交了,这里总结一下. 这道题是将真彩图转换为灰度图. 关于BMP文件结构,这是困扰了我好久的问题,上网查了 ...

  10. JavaScript常用

    打印日志 console.log 类型判断 第一种方式var type = Object.prototype.toString.call(list);console.log(type);第二种方式ty ...