HDU 1010 深搜+奇偶剪枝
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1010
贴个资料:
http://acm.hdu.edu.cn/forum/read.php?tid=6158
奇偶剪枝:
对于从起始点 s 到达终点 e,走且只走 t 步的可达性问题的一种剪枝策略。
如下列矩阵 :
从任意 0 到达 任意 0,所需步数均为偶数,到达任意 1 ,均为奇数。反之亦然
所以有,若s走且只走 t 步可到达e,则必有t >= abs(s.x - e.x) + abs(s.y - e.y),且 (t&1) == ((abs(s.x - e.x) + abs(s.y - e.y))&1)。
否则必不可达。
1 #include<cstdio> 2 #include<cstdlib> 3 using namespace std; 4 char maze[10][10]; 5 int dx[4] = { -1, 1, 0, 0 }; 6 int dy[4] = { 0, 0, -1, 1 }; 7 int sx, sy, ex, ey; 8 bool escape; 9 void dfs(int t, int x, int y) 10 { 11 if (maze[x][y] == 'D'&&t == 0 || escape) 12 { 13 escape = true; return; 14 } 15 char tmp = maze[x][y]; 16 maze[x][y] = 'X'; 17 int T = t - abs(ex - x) - abs(ey - y); 18 if (T >= 0 && T % 2 == 0) 19 { 20 for (int i = 0; i < 4; i++) 21 { 22 int r = dx[i] + x, c = dy[i] + y; 23 if (maze[r][c] == '.' || maze[r][c] == 'D') 24 dfs(t - 1, r, c); 25 } 26 } 27 maze[x][y] = tmp; 28 } 29 int main() 30 { 31 int n, m, t; 32 while (scanf("%d%d%d", &n, &m, &t) && n) 33 { 34 for (int i = 1; i <= n; i++) 35 scanf("%s", maze[i]+1); 36 for (int i = 1; i <= n; i++) 37 { 38 for (int j = 1; j <= m; j++) 39 { 40 if (maze[i][j] == 'S') 41 sx = i, sy = j; 42 if (maze[i][j] == 'D') 43 ex = i, ey = j; 44 } 45 } 46 escape = false; 47 dfs(t, sx, sy); 48 printf(escape ? "YES\n" : "NO\n"); 49 } 50 return 0; 51 }
转载于:https://www.cnblogs.com/-Unc/p/4134890.html
HDU 1010 深搜+奇偶剪枝相关推荐
- hdu1010深搜+奇偶剪枝
奇偶剪枝:把map看作 0 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 从 0->1 需要奇数步 从 1->0 ...
- Black And White HDU - 5113 深搜dfs+剪枝
原题 Problem Description In mathematics, the four color theorem, or the four color map theorem, states ...
- 斗地主(深搜+贪心+剪枝)
斗地主 题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=4325 solution 由于牌数不是很多,n<=23,一开始想到用状态压缩的方 ...
- hdu 1312深搜入门题
2019独角兽企业重金招聘Python工程师标准>>> Red and Black Problem Description There is a rectangular room, ...
- 再探深搜之剪枝、迭代加深及双向搜索
一.剪枝 剪枝的基本方法: 1.优化搜索顺序 2.排除等效冗余 3.可行性剪枝(上下界剪枝) 4.最优性剪枝 例题1:AcWing 167.木棒 这题首先很容易想出暴力的代码:从小到大枚举木棍总长度的 ...
- 2412 - 和为K ---深搜dfs剪枝
**2412 - 和为K ---深搜dfs优化 **来源:东方博宜oj oj.czos.cn #include<bits/stdc++.h> using namespace std; co ...
- 搜索 —— 深搜的剪枝技巧
[概述] 搜索算法的时间复杂度大多是指数级的,难以满足对程序运行时间的限制要求,为使降低时间复杂度,对深度优先搜索可以进行一种优化的基本方法--剪枝. 搜索的进程可以看做是从树根出发,遍历一颗倒置树( ...
- HDU 1010 Tempter of the Bone DFS(奇偶剪枝优化)
需要剪枝否则会超时,然后就是基本的深搜了 #include<cstdio> #include<stdio.h> #include<cstdlib> #include ...
- hdu 3812 Sea Sky 深搜+剪枝
题目意思: 从sea 找一条道sky 的最长路 题解: 先进行一系列的预处理 1.将所有不重复的字符串先保留下来,然后从小到大排序,这样深搜的时候最先弄出来的答案就是最小的 字母序. 2. 进行深度优 ...
最新文章
- Spark MLlib实现的中文文本分类–Naive Bayes
- 安装虚拟机Ubuntu,搭建lnmp环境碰到的坑(二)
- java float 四舍五入_JAVA如何把一个float四舍五入到小数点后指定位数.
- Linux配置免密登录
- windows下如何github ssh 公钥
- 设计一个笔记本电脑类,属性随意,并且进行属性私有化,对外提供公开的set和get方法。 设计一个可插拔的接口:InsertDrawable,该接口有什么方法自行定义。
- python怎样算学的好_python怎么学习好
- IIS服务器应用程序不可用的解决办法
- java web应用程序_说说Java Web中的Web应用程序|乐字节
- MATLAB语言初步学习(五)
- TCP 拥塞控制算法
- MacBook上Wi-Fi抓包权限
- linux下快速查找文件
- 探秘BOF 和EOF
- 推荐《我是谁 – 没有绝对安全的系统》CLAY——Clown Laughing At You「小丑的嘲笑」
- 阿里云云服务器无法通过公网ip地址访问网站的解决方法
- 动态规划---买卖股票的最佳时机
- 5GNR漫谈9:PDSCH和PUSCH资源映射(频域type0/type1和时域typeA/typeB/typeC)
- 栽培员工,让他强大到可以离开!
- SpringCloud微服务搭建(四 搭建EurekaServer集群)
热门文章
- asp.net 下拉框绑定值
- 人教版三年级下册计算机课教案,人教版三年级下册19课教案
- Windows系统的32位和64位系统区别
- 【2020团体程序设计天梯赛】L2部分(PTA,L2-033到L2-036)题解代码复盘
- 【NOIP2008】【Vijos1493】传纸条
- python2中的print语句可以不用小括号。_Python 2.7终结于7个月后,这是你需要了解的3.X炫酷新特性...
- html 内容不被父级包住,解决:父级元素不能被子元素内容撑开的解决办法,父级元素没有高度的解决办法...
- LeetCode解题思路—区间合并
- docker 容器和镜像的区别
- 递归法:整数划分问题(怎么进行划分呢)