带你飞系列-二搜索进阶

来源:互联网 发布:扶贫软件 编辑:程序博客网 时间:2024/05/18 15:07

hdu 1043 - Eight

不做人生不完整系列,有讲解得非常好的文章 八数码的八种境界。

hdu 3567 - Eight II

看上去是上一道题目的扩展,但实际上做法却与上面一道题不同。题目要求求出指定终态字典序最小的最优解,所以不能直接用A*。看到网上题解后,才知道这道题目要预先处理8种情况(X所在位置不同),记录下每种情况能产生的状态。最后直接输出就好。

hdu 2181 - 哈密顿绕行世界问题

这道题目可以直接DFS就能过。

hdu 3533 - Escape

这道题加上了许多限制条件呢。将其化简为普通的BFS就好做了。首先,可以停留在原位,所以转移状态数多了一个留在原地。而在判断是否能够走某一步的时候,同时要判断该店上下左右的炮台此刻会不会有子弹出现在这个位置。这样就是一个普通的BFS。

hdu 1560 - DNA sequence

IDA*练习题。首先想到的时候就是DFS。在深度搜索的时候转移状态必须要在未匹配的序列中出现过。而最优情况下需要未匹配序列中最长的一个的数量,因此可以以此为启发函数,加上IDDFS,以当前长度和最有长度为启发,如果深度小于之,退出搜索,就可以极大地优化程序。

ZOJ 2477

因为只搜5层,所以使用IDA*搜索。由于每次旋转,每面中心颜色总不变,也就确定了最终的状态,找出每个面中与中间颜色不同的个数的最大值,其中每次旋转会更改每个面的3个位置的颜色,所以就是(最大值+2)/3。
总共有12种旋转,找到其中的对应方式,使用转动数组就非常方便了,不过数组的初始化是相当蛋疼的工作,最好手头有个三阶魔方。顺时针与逆时针刚好对应。

HDU 2102 - A计划

这道题入门的时候就做过了,并不是很难,只要注意一下就好。

0 0