BFS-八数码问题与状态图搜索
在一个3*3的棋盘上放置编号为1~8的八个方块,每个占一格,另外还有一个空格。与空格相邻的数字方块可以移动到空格里。任务1:指定的初始棋局和目标棋局,计算出最少的移动步数;任务2:数出数码的移动序列。 把空格看成0,一共有九个数字。 输入样例: 1 2 3 0 8 4 7 6 5 1 0 3 8 2 3 7 6 5 输出样例: 2 1.把一个棋局看成一个状态图,总共有9!= 362880个状态。从初始棋局开始,每次移动转到下一个状态,达到目标棋局后停止。 2.康托展开 康托展开是一种特殊的哈希函数。其功能是在输入一个排列,计算出它在在全排列中从小到大排序的位次。 eg:判断 2143是{1,2,3,4}的全排列中的位次。 (1)首位小于2的所有排列。比2小的只有1,后面三个数的排列有3*2*1=3!个,写成1*3!=6 (2)首位为2,第二位小于1的所有排列。无,写成0*2!=0 (3)前两位为21,第三位小于4的所有排列。只有3一个数,写成1*1!=1 (3)前三位为214,第四位小于3的所有排列。无,写成0*0!=0 求和:1*3!+0*2!+1*1!+0*0!=7 所以位次的计算公式为X = a[n]*(n-1)! +a[n-1]*(n-2)! + … +