搜索
WsMiracle
这个作者很懒,什么都没留下…
展开
-
Eight HDU - 1043 八数码 A*算法
康托展开判重。也可以用打表和双向bfs做。 第一个A*搜索,A*是一种启发式搜索,g为已花代价,h为估计的剩余代价,而A*是根据f=g+h作为估价函数进行排列,也就是优先选择可能最优的节点进行扩展。可以对f进行关键字耗时600ms, 如果对h作为第一关键字, g作为第二关键字耗时170ms。#include <iostream>#include <cstdio>#include <algori原创 2017-09-06 11:02:55 · 391 阅读 · 0 评论 -
HDU - 3567 Eight II IDA*
典型的IDA*题目 估值函数:从当前状态移动到目标状态所需的最小步数(我们可以通过曼哈顿距离进行估值),用于剪枝 迭代:此处我们不再使深度每次加1,而是在搜索过程当中,记录大于len(len表示此次搜索的限制深度)的所有值中的最小值,作为下次迭代的限制深度#include <iostream>#include <cstdio>#include <algorithm>#include <cs原创 2017-09-06 16:31:57 · 365 阅读 · 0 评论 -
DNA sequence HDU - 1560 IDA*
迭代加深搜索,每次限制一个深度,搜不到就+1. 剪枝: 当剩余的深度不够最小匹配次数时直接退出。#include <iostream>#include <cstdio>#include <algorithm>#include <vector>#include <cstring>#include <queue>#include <cmath>using namespace std;int原创 2017-09-07 15:28:45 · 274 阅读 · 0 评论 -
Magic Cube ZOJ - 2477 IDA*模拟
棘手的模拟, 要算出移动后的位置, 注意顺逆针方向, wa了几次, 用IDA*搜索 因为中心颜色确定,找出每个面与中心颜色不同的数量, 每次旋转最多改变12个, 当不同数量/12>深度时剪枝。#include <iostream>#include <cstdio>#include <algorithm>#include <vector>#include <cstring>#include原创 2017-09-07 18:22:45 · 441 阅读 · 1 评论 -
Gap HDU - 1067 BFS
暴力bfs + map判重#include <iostream>#include <cstdio>#include <algorithm>#include <vector>#include <cstring>#include <queue>#include <cmath>#include <map>using namespace std;struct node{ char a原创 2017-09-07 21:18:49 · 255 阅读 · 0 评论