
搜索
Minion_w
这个作者很懒,什么都没留下…
展开
-
UVA 1374 ——Power Calculus(IDA*搜索)
题目链接:点击打开链接题目大意:求出x^1最少经过多少次相乘或者相除的运算才能到达x^n解题思路:枚举可能的次数,将其作为深度,然后对每一个深度进行DFS,看看在这个最大深度内能不能达到所要求的目的 其中还要遇到剪枝问题,很典型的IDA*搜索乐观估价函数 :( 当前的最大值 )* 2 ^(最大深度 - 当前深度)代码:#include原创 2017-08-09 23:54:48 · 282 阅读 · 0 评论 -
生成全排列
生成数字 1 ~ n的全排列 :#include#includeusing namespace std;void print_permutation(int n, int *A, int cur){ if(cur == n) { for(int i = 0; i < n; i++) printf("%d ", A[i]);原创 2017-08-13 13:56:08 · 265 阅读 · 0 评论 -
子集生成
一、增量构造法产生没有重复元素集合的所有子集#include#include#includeusing namespace std;void print_subset(int n, int * A, int cur){ for(int i = 0; i < cur; i++) printf("%d ", A[i]); printf("\n");原创 2017-08-13 16:11:47 · 327 阅读 · 0 评论 -
回溯法
当把问题分成若干个步骤并递归求解时,如果当前步骤,没有合法的解释,则函数将返回上一级递归调用,这种现象称为回溯,正是因为这个原因,递归枚举算法常被称为回溯法,应用十分广泛。经典的八皇后问题: 在棋盘上放置八个皇后,使得他们户部攻击,此时每个皇后的攻击范围为同行同列和同对角线要求找出所有的解代码:#includeusing namespace s原创 2017-08-13 16:44:14 · 279 阅读 · 0 评论 -
路径寻找问题
路径寻找问题可以归结为隐式图的遍历,他的任务是找到一条路径从初始状态到终止状态的最优路径,而不是像回溯法那样找到一个符合某些要求的解经典的八数码问题:编号为1 ~ 8 的8个正方形滑块被摆成3行3列(有一个格子为空),每次可以把空格和相邻的四个滑块互换,给定初始和目标局面(0表示空格),你的任务是计算从初始到目标位置最少移动的步数,如果无法达到则输出-1;输入: 2 6 4 1 3 7原创 2017-08-13 17:09:39 · 499 阅读 · 0 评论 -
迭代加深搜索 (IDA*)
迭代加深搜索: 从小到大枚举深度 maxd, 每次执行只考虑深度不超过maxd的结点。这样,只要解得深度有限,则一定可以在有限的时间内枚举到(一定要有解哈) 如果可以设计出一个乐观估价函数,预测从当前结点至少还需要扩展几层结点才有可能得到解,则迭代加深搜索变成了IDA*算法经典的埃及分数问题: 在古埃及,人们使用单位分数的和(1/a, a为自然数),表示有理数、原创 2017-08-13 17:21:47 · 750 阅读 · 0 评论 -
poj 2718 Smallest Difference 穷竭搜索之全排列
很久没有做搜索的题目了,一拿过题竟然还有点手生,去网上看了题解,学到了不少关于string这个类的简便用法,但是也确实慢,看到许多题解都在写用DFS和贪心求解,但是觉得实在太费事了,不想那么大费周章,想改一改优化优化看看全排列能不能过,没想到全排列竟然过了,确实有点水,不过也复习了一下全排列的用法,学了就忘 关于String的许多简单用法:/*删除字符串中某一个特定的字符s.era原创 2017-09-25 11:43:14 · 301 阅读 · 0 评论