摘要:
半年前在POJ上遇到过一次剪枝的题目,那时觉得剪枝好神秘。。。今天在网上查了半天资料,终于还是摸索到了一点知识,但是相关资料并不多,在我看来,剪枝是技巧,而不是方法,也就是说,可能一点实用的小技巧,让程序可以少判断一点,这就是剪枝,剪枝无处不在,搜索的进程可以看作是从树根出发,遍历一棵倒置的树—-搜索树的过程。而所谓的剪枝,顾名思义,就是通过某种判断,避免一些不必要的遍历过程,形象的说,就是减去了搜索树中的某些“枝条”,故称剪枝。(杭电课件上是这么说的:即剪去解答树上已被证明不可能存在可行解或最优解的子树.)既然采用了搜索,剪枝就显得十分的必要,即使就简简单单的设一个槛值,或多加一两条判断,就 阅读全文
摘要:
经典深搜加剪枝问题!问题主要是奇偶剪枝这地方卡了许久,步数剪枝也没考虑到,还有对DFS于BFS的区别了解不多。题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1010存在的问题:1、对深搜和广搜的理解不深刻,特别是回溯的状态与条件。2、实现一个算法的速度还比较慢! 3、以后少花时间去追程序的BUG,多花时间去想想算法!剪枝前后对比:第一个是删掉奇偶剪枝后的情况:int temp=T - t - abs(x - n) - abs(y - m); //奇偶剪枝if(temp < 0 || temp & 1) return ;第二个是删掉步 阅读全文
摘要:
深搜,主要是搜索状态的确定与转移。题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016通过题目发现的问题:1、对深搜确定一个搜索状态还不太清楚。2、实现一个算法还比较慢,以后要勤加练习!小结:深搜其实是一种盲目搜索,是利用计算机高效计算性能从而找到结果的一种方法!正确的CODE:1#include<stdio.h>2#include<stdlib.h>3#include<string.h>4#include<assert.h>5#include<math.h>6#defineMAX_L 阅读全文