刷题数:4 今天看书看了A*与IDA*,算法竞赛入门经典124~133页。 先说一下看书后对知识点的认识,A*算法就是设计一个估价函数,附加到其优先队列的权值比较中,然后还是得到目标状态的解。值得一提的是,设当前状态为state,估值函数为f(state),当前状态到目标状态的最小代价为g(stat ...
分类:
其他好文 时间:
2019-08-03 21:33:51
阅读次数:
84
题目传送门 乍一看好像是搜索题,但搜索明显会超时。 此处采用IDA*的方法求解。 IDA*算法就是基于迭代加深的A*算法。 code: ...
分类:
其他好文 时间:
2018-01-07 20:23:53
阅读次数:
180
本题题意: 输入一个n*m的棋盘,某些格子有标记,用最少的皇后占据或者攻击所以带标记的格子。皇后的攻击范围为同行同列和同对角线。 可以使用IDA*算法,即从样例可以发现只需要最多5个棋子就可以对棋盘上所有地方进行攻击,因而使用IDA*进行对应的剪枝即可。 ...
分类:
其他好文 时间:
2017-09-13 23:17:28
阅读次数:
267
恢复内容开始 上一次介绍过dbfs版本,这次来介绍idA*版本。 首先要理解idA*算法的思想,是将迭代加深与A*的结合,将估价函数h(n)作为迭代的限制值,进行dfs。 (A*和迭代加深的介绍等有时间再写出来吧) 对所有点(除0以外的)进行曼哈顿距离计算(目标状态到初始状态),h(n)为当前节点的 ...
分类:
其他好文 时间:
2017-08-19 23:38:45
阅读次数:
220
IDA*算法,即迭代加深的A*算法。实际上就是迭代加深+DFS+估价函数 题目传送:The Rotation Game AC代码: #include <map> #include <set> #include <list> #include <cmath> #include <deque> #inc ...
分类:
其他好文 时间:
2017-07-21 10:42:46
阅读次数:
123
https://vjudge.net/problem/UVA-1343 题意:如图所示,一共有8个1,8个2和8个3,如何以最少的移动来使得中间8个格子都为同一个数。 思路:状态空间搜索问题。 用IDA*算法的话会比较快,而且代码比较简洁。 IDA*的关键就是要寻找一个估价函数h(),在这道题目中, ...
分类:
其他好文 时间:
2017-01-24 10:55:35
阅读次数:
295
题意:给定一个数n,让你求从1至少要做多少次乘除才可以从 x 得到 xn。 析:首先这个是幂级的,次数不会很多,所以可以考虑IDA*算法,这个算法并不难,难在找乐观函数h(x), 这个题乐观函数可以是当前最大数*2maxd - d 小于n,回溯。很好理解,最大的数再一直乘2都达不到,最终肯定达不到。 ...
分类:
其他好文 时间:
2016-06-20 00:38:23
阅读次数:
173
1. 题目描述给定一个正整数$n$,求经过多少次乘法或除法运算可以从$x$得到$x^n$?中间结果也是可以复用的。2. 基本思路实际结果其实非常小,肯定不会超过20。因此,可以采用IDA*算法。注意几个剪枝优化就好了:(1)每次新计算的值必须从未出现过;(2)每次新计算的值进行还可以执行的运算次数的
分类:
其他好文 时间:
2016-03-23 19:46:33
阅读次数:
273
原题https://uva.onlinejudge.org/external/13/1343.pdf题意: 有个#字型的棋盘,2行2列,一共24个格。如图:每个格子是1或2或3,一共8个1,8个2,8个3.有A~H一共8种合法操作,比如A代表把A这一列向上移动一个,最上面的格会补到最下面。求:使中....
分类:
编程语言 时间:
2015-11-11 14:56:31
阅读次数:
233
题意: 经典的埃及分数问题,即给出一个真分数,求出用个数最少的单位分数来表示这个分数。如果有多种方案,要让每个分数尽量的大,即分母尽量的小。会有K个禁止使用的单位分数。分析: IDA*算法。当按照分母递增的顺序排列时, 如果当前考虑的分数为1/e,剩下的maxd - d+1层都是1/e,但仍然...
分类:
其他好文 时间:
2015-10-11 18:06:11
阅读次数:
290