利用Python求解八数码难题

本文介绍了使用Python解决八数码难题,分别利用宽度优先搜索和有序搜索算法,给出了搜索树和从初始节点到目标节点的路径。实验结果显示,有序搜索在扩展节点个数和生成节点个数上优于宽度优先搜索,表明有序搜索的效率更高。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验目的
  • 实验内容
    八数码问题也称为九宫问题。在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) 宽度优先搜索

Created with Raphaël 2.2.0 开始 把起始节点S 放入OPEN表 Open表为空? 失败 把第一个节点(n)从Open表移至Closed表 扩展n,把n的后继节点放入Open表的末端,提供返回节点n的指针 是否有后继节点为 目标节点? 成功并结束 yes no
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值