八数码(数字华容道)-分支限界法

目标函数:曼哈顿距离为0,k最小
约束函数:0<=i<m, 0<=j<n
限界函数:newNode!=oldNode,newNode.distance<=oldNode.distance
算法思想:
使用分支限界法求解该问题。构建一颗解空间树,解空间树的每个结点都是一种棋盘状态。使用广度优先搜索策略进行搜索,并在搜索过程中使用约束函数和限界函数进行剪枝。当搜索到满足目标函数的棋盘状态时,此时搜索空间树的高度就是空格移动的步数。
目标函数是distance=0且k最小。distance是所有数字的当前位置与目标位置间的距离之和(使用曼哈顿距离),k是空格的移动步数。
约束函数是0<=i<m, 0<=j<n。(i,j)是空格位置,m和n是空间大小。
限界函数是newNode!=oldNode,newNode.distance<=oldNode.distance。设newNode为要入堆的棋盘状态,oldNode为堆中的棋盘状态。

求解过程:
(1)初始化一个空的优先队列(最小堆),并将初始棋盘状态添加到队列中。
(2)当优先队列不为空时,从队列中取出具有最小曼哈顿距离的棋盘状态。
(3)对于当前棋盘状态,检查是否已经到达目标状态。如果是,则返回移动序列;否则,继续进行下一步。
(4)计算当前棋盘状态下所有可能的合法移动,将这些移动生成的新的棋盘状态添加到优先队列中。
(5)返回步骤(2),重复上述过程,直到找到目标状态或优先队列为空。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值