题目描述: http://acm.hdu.edu.cn/showproblem.php?pid=1043 中文大意: 经典八数码问题。 给定初始状态,要求变换到目标状态并输出移动过程。 目标状态固定为:1 2 3 4 5 6 7 8 x 。 思路: 采用逆向 BFS + 康托展开判重 + 打表的方法 ...
分类:
其他好文 时间:
2021-02-08 12:12:13
阅读次数:
0
简介:一个九宫格中有八个数字,一位空格,每次只能移动相邻的两个格子,现要求把九宫格变为“12345678x”的样子(x代表空格) Sample Input 2 3 4 1 5 x 7 6 8 Sample Output ullddrurdllurdruldr 这里我们要用到康拓展开,具体介绍如下: ...
分类:
其他好文 时间:
2020-09-15 21:01:35
阅读次数:
31
八数码问题 逆序对个数变化问题 首先复习一下逆序对,在一个序列中,如果下标$i<j$并且$A[i]>A[j]$则称ij为一对逆序对,可以看到逆序对最多为$n*(n-1)/2$,这种成对的关系中。 如果将八数码看做是一条字符串的话,那么每一次移动必然会使得逆序对个数的奇偶性发生改变。这一原理是极易证明 ...
分类:
其他好文 时间:
2020-09-12 21:37:17
阅读次数:
31
八数码问题(Eight):八数码问题是人工智能中的经典问题有一个3*3的棋盘,其中有0-8共9个数字,0表示空格,其他的数字可以和0交换位置。求由初始状态到达目标状态8 2 3 1 2 31 4 6 > 4 5 65 7 0 7 8 0的步数最少的解。题目描述在3×3的棋盘上,摆有八个棋子,每个棋子 ...
分类:
其他好文 时间:
2020-07-25 23:33:41
阅读次数:
76
Eight 题意:八数码问题 思路:反向BFS+康托展开 const int maxn = 362885; const int FAC[] = { 1,1,2,6,24,120,720,5040,40320,362880,3628800 }; int cantor(int* a) {//算出全排列对 ...
分类:
其他好文 时间:
2020-07-24 09:46:19
阅读次数:
77
##题面 在一个3×3的网格中,1~8这8个数字和一个“X”恰好不重不漏地分布在这3×3的网格中。 例如: 1 2 3 X 4 6 7 5 8 在游戏过程中,可以把“X”与其上、下、左、右四个方向之一的数字交换(如果存在)。 我们的目的是通过交换,使得网格变为如下排列(称为正确排列): 1 2 3 ...
题目链接:http://poj.org/problem?id=1077 使用A*搜索中的估价函数要小于等于真实值才能更快的收敛,本题中已经花费的开销是从start状态到目前状态的花费,也就是dist,可以将字符串映射到一个整数表示开销,如果在hash中没有这个键则表示 这个state并没与进入过队列 ...
分类:
编程语言 时间:
2020-06-21 15:35:50
阅读次数:
54
Description 三行三列的数组,其元素值为0至8的数。现有如下的变换规则: 1: 将0与上面一行元素对换 2:将0与下面一行元素对换 3:将0与左面一行元素对换 4:将0与右面一行元素对换 如果已知一个三行三列元素的初始情况,问最少需几次变换,能变换为指定的一种情况? Input 包括六行的 ...
分类:
其他好文 时间:
2020-05-24 09:57:25
阅读次数:
47
题目:八数码 网址:http://poj.org/problem?id=1077 在一个3×3的网格中,1~8这8个数字和一个“X”恰好不重不漏地分布在这3×3的网格中。 例如: 在游戏过程中,可以把“X”与其上、下、左、右四个方向之一的数字交换(如果存在)。 我们的目的是通过交换,使得网格变为如下 ...
分类:
其他好文 时间:
2020-05-01 21:00:10
阅读次数:
103
A*算法是一种启发式搜索算法,它的关键在于,每次从open表中选取结点时,要按特定的策略选取。该策略如下所述: 引入估值函数, f(n)是结点n的函数,f(n)越小,就意味着从初始状态节点S通过结点n的路径长度的估值最短。简而言之,f(n)越小,则通过结点n的路径是最佳路径的可能性越大。 因此,从o ...
分类:
编程语言 时间:
2020-03-25 17:34:56
阅读次数:
270