UVA - 10181 15-Puzzle Problem(15数码 A*)

这篇博客介绍了如何运用A*算法解决UVA在线判题系统中的10181题——15-Puzzle Problem。博主详细解析了A*算法的工作原理,其中f(n) = g(n) + h(n),g(n)表示移动步数,h(n)表示曼哈顿距离。同时,博主还讲解了判断15数码局面是否可解的条件,即N + e的奇偶性。经过优化的代码在0.068秒内完成了计算。

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

题目大意:

给你一个八数码的序列,要求你在50步之内还原成,初始的形状,如果可以就输出其路径,否则就输出 This puzzle is not solvable.


解析:

这题是用A*算法实现的,上网查了很多资料,了解了什么是A*算法。

A*算法,实质上是根据估价函数进行bfs,每次都选取估价最小的状态,进行移动。

其中 f(n) 是从初始点经由节点n到目标点的估价函数,
g(n) 是在状态空间中从初始节点到n节点的实际代价,
h(n) 是从n到目标节点最佳路径的估计代价

f(n) = g(n) + h(n)

g(n)在该题中是当前的移动步数,h(n)是当前到状态到终点的曼哈顿距离


还有就是如何判断,15数码是否能满足条件。

设 e 表示空滑块所在的行,n 为在当前滑块之后出现小于当前滑块数值的滑块数目,N 为: 
        15          15  
 N =   ∑  ni =   ∑  ni  
        i = 1       i = 2  
如果 N + e 为偶数,则当前局面有解,否则无解。如以下局面:  
 13 10 11 6  

 5  7  4  8  

 1  12 14 9   

 3  15 2  0   
 则有小于 13 并在之后出现滑块的数目为 12,小于 10 并在之后出现的滑块数目为 9,类似的,可以得到  
 其他滑块的 n 值分别为 9(11&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值