一、思路很简单,搜索。对于每一种状态,利用康托展开编码成一个整数。于是,状态就可以记忆了。 二、在搜索之前,可以先做个优化,对于逆序数为奇数的序列,一定无解。 三、搜索方法有很多。 1、最普通的:深搜、广搜。在这题里面,这两个方法直接TLE。所以,我后面没有贴超时的代码。 2、既然1超时,那就预处理 ...
分类:
其他好文 时间:
2017-12-03 16:23:44
阅读次数:
268
八数码问题 利用启发式搜索,找出以下问题的最优解。 ...
分类:
其他好文 时间:
2017-11-15 10:44:28
阅读次数:
117
BFS实现8数码问题,思考与总结 今天中午学习了二叉树的线索化与线索化遍历,突然有一种想实现八数码问题的冲动,因为它的初级解决方式是BFS(广度优先搜索算法)。于是我开始编程。 没想到一编就是一个下午,一直编到了晚上8点。期间出现了很多问题。 1.拷贝函数拷贝完之后,对目标对象进行的操作,会影响源对 ...
分类:
其他好文 时间:
2017-10-03 23:20:18
阅读次数:
331
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1043 题目大意:传统八数码问题 解题思路:就是从“12345678x”这个终点状态开始反向BFS,将各个状态记录下来,因为数字太大所以用康托展开将数字离散化。 代码: ...
分类:
其他好文 时间:
2017-09-16 01:14:35
阅读次数:
209
题目链接 https://vjudge.net/problem/HDU-1043 经典的八数码问题,学过算法的老哥都会拿它练搜索 题意: 给出每行一组的数据,每组数据代表3*3的八数码表,要求程序复原为初始状态 思路: 参加网站比赛时拿到此题目,因为之前写过八数码问题,心中暗喜,于是写出一套暴力bf ...
分类:
其他好文 时间:
2017-08-23 22:12:43
阅读次数:
216
恢复内容开始 上一次介绍过dbfs版本,这次来介绍idA*版本。 首先要理解idA*算法的思想,是将迭代加深与A*的结合,将估价函数h(n)作为迭代的限制值,进行dfs。 (A*和迭代加深的介绍等有时间再写出来吧) 对所有点(除0以外的)进行曼哈顿距离计算(目标状态到初始状态),h(n)为当前节点的 ...
分类:
其他好文 时间:
2017-08-19 23:38:45
阅读次数:
220
八数码问题:在3×3的方格棋盘上,摆放着1到8这八个数码,有1个方格是空的,其初始状态如图1所看到的,要求对空格运行空格左移、空格右移、空格上移和空格下移这四个操作使得棋盘从初始状态到目标状态。 搜索顺序有两种: (1)两个方向交替进行扩展 (2)每次选择节点少的那个扩展 一般来说方法(2)能够克服 ...
分类:
其他好文 时间:
2017-07-08 11:18:15
阅读次数:
193
背景 Yours和zero在研究A*启发式算法.拿到一道经典的A*问题,但是他们不会做,请你帮他们. 描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字。棋盘中留有一个空格,空格用0来表示。空格周围的棋子可以移到空格中。要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了使 ...
分类:
其他好文 时间:
2017-07-05 23:02:41
阅读次数:
312
紫书上的程序真是牛逼 用到了路径寻找之类,还有状态数组,bfs,按坐标寻路的数组。hash,编码解码。STL等 #include<cstdio> #include<cstring> #include<set> #include<set> using namespace std; #define ma ...
分类:
其他好文 时间:
2017-06-13 17:19:30
阅读次数:
168