HDU 1010 Tempter of the Bone heuristic 修剪
的问题是,在测试修剪。
应该说是更先进的应用。
由于使用的heuristic(经验)修剪。总结这方面的经验法则,别easy。我说,这也是由于先进的在线报告中的应用程序没有分析太多太好的解决这个问题,计划给也很慢,只有失去了。从这个很多人不这样做的问题。
这里我须要更正一下网上流行的说法:奇偶剪枝法。
事实上本题使用奇偶剪枝法并不能太大提快速度,只能说只让使用奇偶剪枝过掉。
所以网上说本题使用奇偶剪枝的,事实上并不能提快速度。
原因:
奇偶剪枝仅仅能剪枝一次,不能在递归的时候剪枝,由于仅仅要初始化位置符合奇偶性,那么之后的随意方格都会符合奇偶性。
故此理论上也是不能提快速度的。当然本人也实验过多次。证实奇偶剪枝至少对本题来说用处不大。
本题的主要剪枝法应该是一条: 最大空格数和步数比較。就是说假设生下的空格数位grids。而须要走T步,grids < T的时候,就能够判定为NO了。
当然还有第二条剪枝:假设当前位置到目标位置最少须要steps步。而须要走T步,那么steps > T,就能够判定为NO了。
只是事实证明仅仅须要使用第一个剪枝法就能够了。
第二条剪枝用处也不大,原因:递归的格子非常少。计算距离差并不能提高多少速度。
如我以下递归循环中仅仅使用一条主要剪枝就足够了,不超100ms。尽管没有做到0ms,只是速度已经是够快的了。
0ms预计须要进一步的剪枝。有大牛,请不吝赐教一下。有空要深入研究一下A*算法才行了。
int sr = 0, sc = 0, dr = 0, dc = 0, n, m, grids, Tsec;
vector<string> maze; bool escapeMaze()
{
if (sr == dr && sc == dc)
{
if (Tsec == 0) return true;
return false;
}
if (grids < Tsec) return false;
if (Tsec == 0) return false; maze[sr][sc] = '$';
grids--; Tsec--;
if (sr+1 <(int)maze.size() && maze[sr+1][sc] == '.')
{
sr++;
if (escapeMaze()) return true;
sr--;
}
if (sc+1 < (int)maze[0].size() && maze[sr][sc+1] == '.')
{
sc++;
if (escapeMaze()) return true;
sc--;
}
if (sc > 0 && maze[sr][sc-1] == '.')
{
sc--;
if (escapeMaze()) return true;
sc++;
}
if (sr > 0 && maze[sr-1][sc] == '.')
{
sr--;
if (escapeMaze()) return true;
sr++;
}
maze[sr][sc] = '.';
grids++; Tsec++;
return false;
} int main()
{
while (scanf("%d %d %d", &n, &m, &Tsec) && n)
{
grids = n * m - 1;
maze.clear(); maze.resize(n);
for (int i = 0; i < n; i++)
{
cin>>maze[i];
for (int j = 0; j < m; j++)
{
if (maze[i][j] == 'S') sr = i, sc = j; //别忘记了这里是'S'
else if (maze[i][j] == 'D') dr = i, dc = j, maze[i][j] = '.';
else if (maze[i][j] == 'X') grids--;
}
}
int t = Tsec - (abs(dr - sr) + abs(dc-sc));
if (t < 0 || (t & 1) || grids < Tsec) puts("NO");
else if (escapeMaze()) puts("YES");
else puts("NO");
}
return 0;
}
版权声明:笔者靖心脏,景空间地址:http://blog.csdn.net/kenden23/,只有经过作者同意转载。
HDU 1010 Tempter of the Bone heuristic 修剪的更多相关文章
- HDU 1010 Tempter of the Bone --- DFS
HDU 1010 题目大意:给定你起点S,和终点D,X为墙不可走,问你是否能在 T 时刻恰好到达终点D. 参考: 奇偶剪枝 奇偶剪枝简单解释: 在一个只能往X.Y方向走的方格上,从起点到终点的最短步数 ...
- 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 ...
- hdu 1010 Tempter of the Bone 奇偶剪枝
如果所给的时间(步数) t 小于最短步数path,那么一定走不到. 若满足t>path.但是如果能在恰好 t 步的时候,走到出口处.那么(t-path)必须是二的倍数. 关于第二种方案的解释 ...
- 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 ...
- 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 ...
- Hdu 1010 Tempter of the Bone 分类: Translation Mode 2014-08-04 16:11 82人阅读 评论(0) 收藏
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- hdu 1010 Tempter of the Bone 深搜+剪枝
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- 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 ...
- hdu 1010 Tempter of the Bone(深搜+奇偶剪枝)
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
随机推荐
- 【SPOJ 694】Distinct Substrings
[链接]h在这里写链接 [题意] 给你一个长度最多为1000的字符串 让你求出一个数x,这个x=这个字符串的不同子串个数; [题解] 后缀数组题. 把原串复制一份,加在 ...
- android请求
//请求 HttpURLConnection conn = (HttpURLConnection)new URL(path).openConnection(); conn.setConnecTimeo ...
- XML Parser Errors See Details for more Information XML Parser Error on line 1: Document root ele
1.错误描写叙述 XML Parser Errors See Details for more Information XML Parser Error on line 1: Document roo ...
- FFTW库+VS2012配置
配置环境:Windows7+VS2012 下载资源包,解压后例如以下图: 要嵌入VS2012中,须要相应的lib文件,于是接下来使用VS2012来生成相应的lib文件 在VS2012/Common7/ ...
- sublime课程3 sublime编辑器的常用设置有哪些
sublime课程3 sublime编辑器的常用设置有哪些 一.总结 一句话总结:其实功能的话可以直接取配置里面搜索关键词,所以搜索是神技. 1.sublime如何开启背景线? "highl ...
- jquery如何实现动态增加选择框
jquery如何实现动态增加选择框 一.总结 一句话总结:用jquery的clone(true)方法. 1.如何在页面中复制amazeui加了特效的标签? amazeui中的控件带js方法,不知道那部 ...
- js中json数据简单处理(JSON.parse()和js中嵌套html)
js中json数据简单处理(JSON.parse()和js中嵌套html) 一.总结 1.html中嵌套js:<script>js代码</script> 2.js中嵌套html ...
- stm32的DMA基础,配置流程解析
这是手册上的流程 下面是对应的库函数 下面我们就按流程去看相应的寄存器: 步骤1里的寄存器, 进入下面的函数内部: 可以找到对应的操作: 再看下一个重要的寄存器: 再看下一个寄存器: 还有一种模式是: ...
- MouseGestureLahk
http://cyber-furoshiki.com/win-mouse-gesture-l http://www.vector.co.jp/download/file/winnt/util/fh68 ...
- hibernate级联保存问题
异常:org.hibernate.TransientObjectException: object references an unsaved transient instance 解决方法: XML ...