题目描述DescriptionYours和zero在研究A*启发式算法.拿到一道经典的A*问题,但是他们不会做,请你帮他们.问题描述在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字。棋盘中留有一个空格,空格用0来表示。空格周围的棋子可以移到空格中。要求解的问题是:给出一种初始布局(初始...
分类:
其他好文 时间:
2015-08-17 21:21:21
阅读次数:
132
八数码问题搜索有很多高效方法:如A*算法、双向广搜等
但在搜索过程中都会遇到同一个问题,那就是判重操作(如果重复就剪枝),如何高效的判重是8数码问题中效率的关键
下面关于几种判重方法进行比较:编码、hash、set
看到问题初学者最先想到的应该就是用一个vis数组标志一下即可。但是该申请多大的数组呢?一个9维数组(9^9=387420489太大了吧)?如果内存允许这是最高效的办法:O(1)
...
分类:
其他好文 时间:
2015-08-11 12:22:26
阅读次数:
210
紫书上的程序真是牛逼
用到了路径寻找之类,还有状态数组,bfs,按坐标寻路的数组,hash,编码解码,STL等
#include
#include
#include
#include
using namespace std;
#define maxstate 1000000
typedef int State[9];
State st[maxstate] , goal;
int dist[ma...
分类:
其他好文 时间:
2015-08-01 11:37:45
阅读次数:
124
这道题花了我一晚上去了看了一种解法,结果最后悲剧了,只在poj上过了,在hdu上TLE,原因是因为hdu上是多组数
据,而poj上是一组数据。。。悲剧啊,学的方法有点低效。。。
不过那个打印路径方法倒是可以借鉴一下,从终点往起点递归,打印路径。。。
贴代码:
#include
#include
#include
#include
using namespace std;
#define N...
分类:
其他好文 时间:
2015-07-31 01:26:07
阅读次数:
90
题意:八数码,但是转移的方式是转动,一共十二种,有多组询问,初态唯一,终态不唯一。题解:初态唯一,那么可以预处理出012345678的所有转移情况,然后将初态对012345678做一个映射,再枚举一下终态的所有情况,取最小值即可。不得不学了逆cantor展开,cantor展开是一个变进制数,每位上是...
分类:
其他好文 时间:
2015-07-26 23:58:43
阅读次数:
195
The 15-puzzle has been around for over 100 years; even if you don't know it by that name, you've seen it. It is constructed with 15 sliding tiles, eac...
分类:
其他好文 时间:
2015-07-26 20:30:06
阅读次数:
106
题目描述 Description
Yours和zero在研究A*启发式算法.拿到一道经典的A*问题,但是他们不会做,请你帮他们.
在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字。棋盘中留有一个空格,空格用0来表示。空格周围的棋子可以移到空格中。要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了使题目简单,设目标状态为123804765),找到一种最少步骤的移动方法,实现...
分类:
其他好文 时间:
2015-07-24 20:50:47
阅读次数:
117
DescriptionThe 15-puzzle has been around for over 100 years; even if you don't know it by that name, you've seen it. It is constructed with 15 sliding...
分类:
其他好文 时间:
2015-07-23 15:25:26
阅读次数:
141
题意:给你一个序列,和标准序列连线,求交点数。题解:就是求逆序对个数,用数组数组优化就行了。做八数码的时候,求逆序数搜过怎么求,但是练习时忘了。。。于是当场想怎么实现,结果搞了1个小时才搞出来,还被WA了个LongLong,基础还不够扎实#include#include#include#includ...
分类:
编程语言 时间:
2015-07-21 18:32:03
阅读次数:
119
题意 输出八数码问题从给定状态到12345678x的路径
用康托展开将排列对应为整数 即这个排列在所有排列中的字典序 然后就是基础的BFS了
#include
using namespace std;
const int N = 5e5, M = 9;
int x[4] = { -1, 1, 0, 0};
int y[4] = {0, 0, -1, 1};
int fac[] = {1...
分类:
其他好文 时间:
2015-07-05 18:36:06
阅读次数:
136