以下内容转载自:http://www.cnblogs.com/goodness/archive/2010/05/04/1727141.html八数码的八境界 研究经典问题,空说不好,我们拿出一个实际的题目来演绎。八数码问题在北大在线测评系统中有一个对应的题,题目描述如下:EightTime Lim....
分类:
其他好文 时间:
2015-09-02 20:41:47
阅读次数:
228
八数码问题:在3×3的方格棋盘上,摆放着1到8这八个数码,有1个方格是空的,其初始状态如图1所示,要求对空格执行空格左移、空格右移、空格上移和空格下移这四个操作使得棋盘从初始状态到目标状态。
// eight.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"...
分类:
其他好文 时间:
2015-08-18 06:35:52
阅读次数:
144
八数码问题搜索有很多高效方法:如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
题意 输出八数码问题从给定状态到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
毕竟新手上路23333,有谬误还请指正。 课程设计遇到八数码问题(这也是一坨),也查过一些资料并不喜欢用类函数写感觉这样规模小些的问题没有必要,一开始用深度搜索却发现深搜会陷入无底洞,如果设定了深度限制又会有很多情况无法找到,然后果断放弃,改用广度搜索。 如果要改善代码效率还可以用双向搜索,即从起始...
分类:
编程语言 时间:
2015-06-28 06:26:51
阅读次数:
147
八数码问题一、问题描述所谓八数码问题是指:将分别标有数字1,2,3,…,8的八块正方形数码牌任意地放在一块3×3的数码盘上。放牌时要求不能重叠。于是,在3×3的数码盘上出现了一个空格。现在要求按照每次只能将与空格相邻的数码牌与空格交换的原则,将任意摆放的数码盘逐步摆成某种特殊的排列。二、问题分析首先...
分类:
其他好文 时间:
2015-06-22 20:44:26
阅读次数:
90
八数码问题,各种解法。
/*
// BFS
#include
#include
#include
using namespace std;
// 把1..n的排列映射为数字 0..(n!-1)
int fac[] = { 1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880 };//...
int order(const char *s, int ...
分类:
其他好文 时间:
2015-05-13 10:33:15
阅读次数:
94
分析:经典的八数码问题,参考别人的代码写的,逆向广搜,把结果保存起来,之后在使用。
#include
#include
using namespace std;
#define STATE_COUNT 363000 //因为9!=362880
int fact[]={1,1,2,6,24,120,720,5040,40320,362880}; //0到9的阶乘,用来计算hash值
cha...
分类:
其他好文 时间:
2015-04-27 21:54:28
阅读次数:
175
1.题目描述:点击打开链接
2.解题思路:本题利用迭代加深搜索解决。好久没做这个专题了,感觉这种方法有点力不从心,不会寻找估价函数是硬伤。。。只好学一学别人的代码。
本题要求棋盘中间的8个方格都要是相同的数字。紫书上说是利用状态空间搜索解决,大致模板还是八数码问题的模板。但是写了半天最后WA了,感觉这道题用那个模板写出来会很复杂。最后看别人的代码,才发现大多都是利用迭代加深搜索解决的,代码量也...
分类:
其他好文 时间:
2015-04-11 18:01:30
阅读次数:
161