题目大意:输入三个整数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,则输出NOprintf("NO\n");continue;}dfs(si, sj, 0);if (!flag) {printf("NO\n");}}
}

转载于:https://www.cnblogs.com/pangblog/p/3265227.html

(step4.3.1) hdu 1010(Tempter of the Bone——DFS)相关推荐

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

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

  2. HDU.1010 Tempter of the Bone

    文章目录 一.题目解读 1.原题 2.分类 3.题意 4.输入输出格式 5.数据范围 二.题解参考 1.总体思路 2.思路① (1).分析 (2).AC代码 三.评价与后话 1.评价 2.奇偶剪枝0- ...

  3. HDOJ 1010 HDU 1010 Tempter of the Bone ACM 1010 IN HDU

    MiYu原创, 转帖请注明 : 转载自 ______________白白の屋 题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1010 题目描述: 代码 ...

  4. 回溯法+奇偶剪枝——Hdu 1010 Tempter of the Bone

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

  5. 输入空格hdu - 1010 - Tempter of the Bone

    时间紧张,先记一笔,后续优化与完善. 题意:一个N*M的地图,走过的点不能再走,X为墙弗成走,能否从点S到点D恰好用时T.(1 < N, M < 7; 0 < T < 50) ...

  6. HDU 1010 Tempter of the Bone heuristic 修剪

    的问题是,在测试修剪. 应该说是更先进的应用. 由于使用的heuristic(经验)修剪.总结这方面的经验法则,别easy.我说,这也是由于先进的在线报告中的应用程序没有分析太多太好的解决这个问题,计 ...

  7. HDU 1010 Tempter of the Bone heuristic 剪枝法

    本题就是考剪枝法了. 应该说是比较高级的应用了.因为要使用heuristic(经验)剪枝法.要总结出这个经验规律来,不容易.我说这是高级的应用也因为网上太多解题报告都没有分析好这题,给出的程序也很慢, ...

  8. HDU1010:Tempter of the Bone(dfs+剪枝)

    http://acm.hdu.edu.cn/showproblem.php?pid=1010   //题目链接 http://ycool.com/post/ymsvd2s//一个很好理解剪枝思想的博客 ...

  9. HDU1010 Tempter of the Bone DFS+剪枝

    点击打开链接 Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Ja ...

最新文章

  1. 7怎么导入中文文献_如何下载并引用参考文献?
  2. 中国科学家发现恐惧情绪的新环路
  3. Nature子刊:皮层内脑机接口的主导感
  4. NOI[2001]食物链
  5. Spring MVC错误处理流程
  6. vba 判断文本框内容是否为空_【VBA】 数据输入 Inputbox 基本语法
  7. ElmentUI Select 有个坑要注意下
  8. 基于 .Net5.0 的快速开发框架,YuebonCore1.0.3 版已发布
  9. TensorFlow2.0:张量限幅
  10. Python自动化开发学习的第九周----线程、进程、协程
  11. java-银行业务调度系统《十一》
  12. Rust: CTP的rust版本如何手工封装
  13. #include《》和#include“”的区别
  14. Windows添加.NET Framework 3.0 NetFx3 失败 - 状态为:0x800f0950
  15. WINDOW端口查看命令
  16. zkui-master 安装过程(小道士随笔)
  17. html5 邮箱后缀自动填写,JS输入用户名自动显示邮箱后缀列表的方法
  18. 2021年中式烹调师(中级)试题及解析及中式烹调师(中级)模拟试题
  19. activated钩子函数
  20. 《iOS APP 性能检测》

热门文章

  1. VS2019 配置QT
  2. 企业千人千面管理模式_一汽解放青岛汽车有限公司荣获“2020(第十六届)中国企业教育先进单位百强”...
  3. 用集合return多个值_Python拾珍:用这些功能写出更简洁、更可读或更高效的代码
  4. r语言mfrow全程_如何使用R完成文章中图片处理小教程
  5. mysql ddl 进度_MySQL DDL详情揭露
  6. php预处理的fetch函数,php 预编译查询始终fetch不到数据解决方案
  7. C语言学习笔记---指针和数组
  8. 梯度消失、梯度爆炸及其解决方法
  9. 吴恩达深度学习2.1练习_Improving Deep Neural Networks_Regularization
  10. 如何在本地管理和切换多个 github 账号?