迭代加深搜索的实现以及哈希表在ID中应用应当注意的问题...
分类:
其他好文 时间:
2015-08-25 16:45:26
阅读次数:
935
题目大意:在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字。棋盘中留有一个空格,空格用0来表示。空格周围的棋子可以移到空格中。要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了使题目简单,设目标状态为123804765),找到一种最少步骤的移动方法,实现从初始布局到目标布局的转变。
思路:使用IDA*算法。估价函数为现在棋盘与目标棋盘的对应元素不同的个数。剪枝:若当前深度加上...
分类:
其他好文 时间:
2015-08-20 19:03:46
阅读次数:
159
题目描述 Description
在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位。在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2,纵坐标相差为1的格子)移动到空位上。
给定一个初始的棋盘,怎样才能经过移动变成如下目标棋盘:
为了体...
分类:
其他好文 时间:
2015-08-18 19:22:04
阅读次数:
257
IDA*算法,即迭代加深的A*算法,实际上就是迭代加深+DFS+估价函数题目传送:The Rotation GameAC代码:#include
#include
#include
#include
#include
#include
#include
#include
#inclu...
分类:
其他好文 时间:
2015-08-15 00:14:54
阅读次数:
162
题目要求乘除法的最少次数,其实就是一个数组中一开始只有一个数:1 ,每次可以从数组中取两个数(可以取同一个数)相加生成一个新数加如数组 。
那么显然这是一个迭代加深搜索,从小到大枚举深度上限 。
为了降低时间复杂度,我们要尽量的减少迭代次数,所以我们优先做加法,并且优先将最大的两个数相加,这样可以最快的接近目标 。
当然,有一个很显然的剪枝: 当每次取最大的两个数相加仍然小于n时要剪枝 。因...
分类:
其他好文 时间:
2015-08-10 22:23:41
阅读次数:
117
题目链接:点击打开链接
题目描述:
在古埃及,人们使用单位分数的和(形如1/a的, a是自然数)表示一切有理数。如:2/3=1/2+1/6,但不允许2/3=1/3+1/3,因为加数中有相同的。对于一个分数a/b,表示方法有很多种,但是哪种最好呢?首先,加数少的比加数多的好,其次,加数个数相同的,最小的分数越大越好。
如:19/45=1/3 + 1/12 + 1/180
...
分类:
其他好文 时间:
2015-08-10 22:09:13
阅读次数:
182
迭代加深搜索(IDDFS)的思想
迭代加深搜索一般用来求解状态树“非常深”,甚至深度可能趋于无穷,但是“目标状态浅”的问题。如果用普通的DFS去求解,往往效率不够高。此时我们可以对DFS进行一些改进。最直观的一种办法是增加一个搜索的最大深度maxd,一般是从1开始。每次搜索都要在maxd深度之内进行,如果没有找到解,就继续增大maxd,直到成功找到解,然后break。
如下图所示,如果...
分类:
其他好文 时间:
2015-08-09 17:07:36
阅读次数:
172
今天做的福州赛区区域赛的题目重现,一整场都在抠这道题仍然无法AC,时间卡的很紧,不过其实也是自己的搜索学的实在太差,紫书上刷的最少的就是第七章的题 。
我一开始就看出了这道题需要IDA*算法,但是昨天才看的还没能深入理解,通过赛后补这道题,感觉整体思路有了一个新的突破 。
IDA*算法就是迭代加深搜索和A*算法的结合,迭代加深搜索非常简单,就是从小到大枚举深度上限,适合求解深度未知的或者像该题...
分类:
编程语言 时间:
2015-08-08 09:11:28
阅读次数:
117
又一道迭代加深搜索,从小到大枚举上限 。 关键的剪枝部分是写出启发函数,这个比较难。。
不过每次剪切后,不正确的数字个数最多减三还是很好理解的,因为我们算不正确数字个数的方法是看当前数字+1是不是等于下一个数字 。 所以每次剪切最多只有3个数字的后继数字发生了改变。 那么 剪枝条件就显而易见了 。
代码如下:
#include
using namespace std;
const in...
分类:
编程语言 时间:
2015-08-05 10:31:49
阅读次数:
156
IDA*算法, 从小到大枚举深度上限,不过该题是有深度上限的,题目中的第一个样例表明:最多需要5个皇后就可以覆盖整个棋盘 。
利用紫书上的技巧,我们可以快速的判断任意两个棋子是不是在同一行、同一列、同一对角线 (详情见紫书P193那两个图)。
这样之后暴力搜索就可以了 。 每一层需要O(nm)的复杂度,但是实际上并不需要那么大的复杂度 。和八皇后问题类似 , 当前行之前的行已经放置了皇后,...
分类:
其他好文 时间:
2015-08-05 08:57:48
阅读次数:
194