采用A算法解决八数码问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
人工智能实验一报告题目:采用A*算法解决八数码问题
姓名: XXX
学号: 10S******
专业:计算机科学与技术
提交日期: 2011-05-04
目录
1问题描述........................................................................................................................... - 2 -
1.1待解决问题的解释............................................................................................... - 2 -
1.2问题的搜索形式描述............................................................................................ - 2 -
1.3解决方案介绍(原理)........................................................................................ - 3 -
2算法介绍........................................................................................................................... - 4 -
2.1A*搜索算法一般介绍............................................................................................ - 4 -
2.2 算法伪代码........................................................................................................... - 4 -
3算法实现........................................................................................................................... - 5 -
3.1 实验环境与问题规模........................................................................................... - 5 -
3.2 数据结构............................................................................................................... - 5 -
3.3 实验结果............................................................................................................... - 6 -
3.4系统中间及最终输出结果.................................................................................... - 6 -
4参考文献........................................................................................................................... - 7 - 5附录—源代码及其注释................................................................................................... - 7 -
1问题描述
所谓八数码问题是指这样一种游戏:将分别标有数字1,2,3,…,8 的八块正方形数码牌任意地放在一块3×3 的数码盘上。放牌时要求不能重叠。于是,在3×3 的数码盘上出现了一个空格。现在要求按照每次只能将与空格相邻的数码牌与空格交换的原则,不断移动该空格方块以使其和相邻的方块互换,直至达到所定义的目标状态。空格方块在中间位置时有上、下、左、右4个方向可移动,在四个角落上有2个方向可移动,在其他位置上有3个方向可移动,问题描述如下图1-1所示:
初始状态中间状态目标状态
图1-1 八数码问题的求解过程
1.1待解决问题的解释
首先,八数码问题包括一个初始状态(START) 和目标状态(END),所谓解决八数码问题就是在两个状态间寻找一系列可过渡状态:
(START>STATE1>STATE2>...>END)
这个状态是否存在就是我们要解决的第一个问题:Q1:每一个状态及每一次操作的表示方法?有许多表示方法,比如一个3*3 的八数码盘可以压缩成一个int 值表示,但不适用于15 puzzle或大于8 的puzzle 问题。如果对空间要求很高,应该还可以再压缩。本文采用一个int 表示的方法。表示方法如下:由于int 的表示范围大于1e9,所以我们取一个int 的低9 位,为了方便寻找空格的位置,int 的个位我们用来放空格的位置(19)。而前8 位,按照行从上到下,列从左到右的顺序依次记录对应位置上的数字。
1.2问题的搜索形式描述
八数码问题形式化描述:
初始状态:
初始状态向量:规定向量中各分量对应的位置,各位置上的数字。把3×3的棋盘按从左到右,从上到下的顺序写成一个一维向量。我们可以设定初始状态:<1,5,2,4,0,3,6,7,8>