双向BFS
CaprYang
这个作者很懒,什么都没留下…
展开
-
Eight HDU - 1043 搜索 A* | 双向BFS
题解 题目很明显使用搜索算法,普通BFS会导致超时,使用A*算法进行搜索。 计算当前状态的每个数字直接移动到他应该在的位置需要的次数求和,作为A*算法的h函数值。 画了几次找规律发现怎么移动逆序对都为偶数,所以特判当逆序对为奇数时不可行。 在搜索过程中,已经搜索到的状态不再进行搜索,需要使用数组进行标记,由于0~8的全排列直接用2进制或10进制表示过大。 使用康拓展卡进行状态压缩,将0~8的全排列...原创 2019-02-27 19:21:47 · 537 阅读 · 0 评论 -
Solitaire HDU - 1401 双向BFS
题解 题目大意,一个棋盘上有四个旗子,给你当前状态和目标状态的旗子,每次可以移动一个旗子也可以跳过另一个旗子,问8次内是否能到达目标状态。 只要常数压的好普通BFS也能过,这里使用双向BFS求解,从初始状态和目标状态同时搜索。 节点记录四个点的位置和操作次数,排序后每个点占用两个10进制位,位压缩为8位10进制作为hash值用unordered_set判重。 每个节点至多操作4次,当当前分支的ha...原创 2019-03-01 17:17:27 · 533 阅读 · 0 评论