实验目的
- 实验内容
八数码问题也称为九宫问题。在3×3的棋盘,摆有八个棋子,每个棋子上标有1至8的某一数字,不同棋子上标的数字不相同。棋盘上还有一个空格,与空格相邻的棋子可以移到空格中。要求解决的问题是:给出一个初始状态和一个目标状态,找出一种从初始状态转变成目标状态的移动棋子步数最少的移动步骤。 - 实验要求
分别利用宽度优先搜索和有序搜索算法求解八数码难题,给出搜索树,并给出从初始节点到目标节点的路径。
实验设备及软件环境
#####1. 电脑配置:
(1)处理器 : Intel i5-4210U CPU @ 1.70GHz, 2.40GHz
(2)安装内存: 8.00GB
(3)操作系统: Windows 10
(4)编程语言: Python
(5)软件环境: python 3.5 、numpy、matplotlib、scipy、Axure 7.0
(6)IDE : PyCharm 5.0.1
实验方法
-
算法描述
(1) 宽度优先搜索
如果搜索是以接近起始节点的程度依次扩展节点的,那么这种搜索就叫做宽度优先搜索。这种搜索是逐层进行的,在对下一层的任一节点进行搜索之前,必须搜索完本层的所有节点。
(2) 有序搜索
令 f ( n ) f(n) f(n) 表示节点 n n n的估价函数值,估算节点希望程度的量度。本次实验选择的 f ( n ) f(n) f(n)的函数形式为:
f ( n ) = g ( n ) + h ( n ) f(n) = g(n) + h(n) f(n)=g(n)+h(n)
其中, g ( n ) g(n) g(n)为初始节点到当前节点的路径长度(深度), h ( n ) h(n) h(n)为当前节点“不在位”的将牌数。
有序搜索(ordered search),即最好优先搜索, 选择Open表上具有最小f值的节点作为下一个要扩展的节点。 -
流程图
(1) 宽度优先搜索