思路:

可以和1010一个思路。这个抽象的说就是让你求给定图中两点的最短距离,其实dfs的题目能变化的地方就在“终点的回溯处”,在我们到达终点后,再判断一些附加的值(本题里是最短距离是否更新),从而得到答案。

这题有个坑点,就是图里'x',即守卫在的点。通常在dfs之前我们都习惯将map[cur_x][cur_y]设置成无法返回的墙,然后在调用完dfs之后再设回通路,而对于x点来说,我们应该将其设置成'x'而不是通路!不然如果the most optimal way如果是后找到的话,那么我们就会受到影响,题目的数据给的不错。。能发现这点


代码:

#include <iostream>
#include <cstring>
#include <cstdio>
#define M 202
#define INF 65535
using namespace std;int n,m;
char map[M][M];
int dir[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};
int ans;void dfs(int cx,int cy,int len) {int flag = 0;//硬条件剪枝 if(cx<1||cy<1||cx>n||cy>m) return;if(map[cx][cy] == '#') return;//软条件剪枝 if(len >= ans) return;if(map[cx][cy] == 'x') {len++;flag = 1;}if(map[cx][cy] == 'r') {ans = len<ans?len:ans;return;}for(int i = 0;i < 4;i++) {int nx = cx+dir[i][0];int ny = cy+dir[i][1];map[cx][cy] = '#';dfs(nx,ny,len+1);if(flag) map[cx][cy] = 'x';else map[cx][cy] = '.';}
}int main()
{int sx,sy;while(cin>>n>>m){ans = INF;for(int i = 1;i <= n;i++){scanf("%s",map[i]+1);for(int j = 1;j <= m;j++) if(map[i][j] == 'a') {sx = i;sy = j;}}dfs(sx,sy,0);if(ans == INF) {cout<<"Poor ANGEL has to stay in the prison all his life."<<endl;continue;}cout<<ans<<endl;}return 0;
} 

转载于:https://www.cnblogs.com/immortal-worm/p/5531079.html

hdu-1242 dfs+各种剪枝相关推荐

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

    题目 这个题思路不难,就是不用奇偶剪枝的话会出现TLE,奇偶剪枝说白了就是一个矩阵分成两种区域,从一种区域走到另一个区域必是奇数步数,从一种区域走回自己的区域必是偶数步数,就算出现了障碍物这个结论依旧 ...

  2. hdu - 1010 dfs + 奇偶剪枝

    problem - 1010 找有多少条路可以到达目的地.如果能到达的话必须在t时刻.先统计有多少个不能走的点,如果n*m-wall,(wall表示'X'点数量 )<= k 的话,一定无法在t时 ...

  3. poj 1564 Sum It Up | zoj 1711 | hdu 1548 (dfs + 剪枝 or 判重)

    Sum It Up Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Sub ...

  4. HDU - 1584 蜘蛛牌(dfs+最优性剪枝)

    题目链接:点击查看 题目大意:给出10张牌,随机分布在1~10十个不同的位置,要求模拟蜘蛛纸牌的游戏规则,问移动的最短距离之和是多少 题目分析:我们可以直接dfs搜索,但需要想清楚该怎么搜索,这个题目 ...

  5. *【HDU - 1242 】 Rescue (反向dfs,或bfs)

    题干: Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is described as a N ...

  6. hdu 1518 dfs+剪枝

    题目大意: 几根棒子能否组成一个正方形 Sample Input 3           //测试组数 4 1 1 1 1   //棒子数目以及每根棒子的长度 5 10 20 30 40 50 8 1 ...

  7. Digital Square HDU - 4394 dfs + 剪枝

    一.内容 Given an integer N,you should come up with the minimum nonnegative integer M.M meets the follow ...

  8. hdu1010 dfs+路径剪枝

    题意:用一个案例来解释 4 4 5 S.X. ..X. ..XD .... 在这个案例中,是一个4*4的地图. . 表示可走的地方, X 表示不可走的地方,S表示起始点,D表示目标点.没走到一个点之后 ...

  9. L3-001 凑零钱(dfs+玄学剪枝=AC)

    题目链接:L3-001 凑零钱 梅梅喜欢满宇宙到处逛街.现在她逛到了一家火星店里,发现这家店有个特别的规矩:你可以用任何星球的硬币付钱,但是绝不找零,当然也不能欠债.韩梅梅手边有 10^​4 ​​ 枚 ...

  10. hdu 4751(dfs染色)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4751 思路:构建新图,对于那些两点连双向边的,忽略,然后其余的都连双向边,于是在新图中,连边的点是能不 ...

最新文章

  1. Django的模板渲染(render)机制
  2. 封装,抽象,继承,多态
  3. c++自底向上算符优先分析_c语言运算符的优先级
  4. 机器学习方法三要素-阿里云大学
  5. python的模块提供了许多文件管理方法_学会这几招,轻松掌握Python文件管理
  6. 游戏开发需要具备哪些技术_短视频 SDK 开发 (一) 开发一款短视频 SDK 需要具备哪些知识?...
  7. Qt笔记-解决QObject::startTimer: Timers cannot be started from another thread
  8. 2011年计算机一级考试题,2011年计算机一级考试模拟试题及参考答案(1)
  9. 经验 | CVPR 2021 Area Chair:谈CVPR 2021审稿
  10. 2017年7月9 号小计
  11. ❤️关于 idea 安装 Vue 插件后新建文件不显示 Vue Component 的问题及解决方法❤️
  12. nvcc fatal : '--ptxas-options=-v': expected a number
  13. HDU---3642:Get The Treasury【立方体体积并】
  14. java ToStringBuilder
  15. python log日志常用用法总结
  16. MATLAB GUI 滑动条设置步长
  17. 相机内参,外参的物理意义
  18. VtkCamera总结
  19. bvh动作 舞蹈_kinect动作捕捉初探(下)——bvh文件的处理和应用
  20. react中qs是什么

热门文章

  1. 例4.2 又一版A+B - 九度教程第43题(进制转换)
  2. mysql重复执行命令_mysql----------mysql的一些常用命令
  3. pyqt5 显示更新进度条_python如何通过pyqt5实现进度条
  4. Python classmethod()
  5. [INet] WebSocket 数据收发的详细过程
  6. 摄像机成像原理图解析
  7. 使用tuned/tuned-adm工具动态调优你的CentOS系统
  8. Android MVP模式 谷歌官方代码解读
  9. c语言:编写一个输出链表的函数print
  10. 面向对象闲话(一)——什么是对象