15数码问题是人工智能中的一个经典问题。所谓的15数码问题:就是在一个4*4的16宫格棋盘上,摆放有15个将牌,每一个都刻有1-15中的某一个数码。棋盘中留有一个空格,允许其周围的某一个将牌向空格移动,这样通过移动将牌就可以不断改变将牌的布局。所要求解的问题:是给定一种初始布局(初始状态)和一个目标布局(目标状态),问如何移动数码实现从初始状态到目标状态的转变,下面给出一种示例:
1 2 3 4 1 2 3 4
5 6 7 8 5 6 7 8
9 10 1112 9 10 11 12
13 14 15 0 0 13 14 15
初始状态 目标状态
本次实现中使用的是IDA*算法,在介绍该算法之前,需要先介绍几个概念,以便更好的介绍IDA*。
逆序数:从左到右看每个数的右边比它小的数的个数,并进行求和。
作用:初始状态和目标状态都是4*4的矩阵,我们分别对两个矩