最短路径算法之AStar算法(三) 《A* Pathfinding for Beginners》一文中的两个问题

本文分析了《A* Pathfinding for Beginners》一文中算法存在的两个问题:1) H函数使用曼哈顿距离而非最短路径;2) 对于已在close链表中的节点处理不当。解决方案包括:1) 调整H函数以计算最短路径;2) 当节点在close链表中但有更低F值时,仍允许扩展。修正后的算法确保每个节点仅以最小F值扩展一次,避免重复扩展。

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

现在,看看网上流传的很广的一篇文章《A* Pathfinding for Beginners》,经典的A STar算法的入门文章,也是我前面推荐的阅读文章。

 

个人认为,这篇入门文章的算法不能找出最短路径,只能找出较短路径。因为算法有两个问题:

 

1,这篇入门文章的算法的H函数采用曼哈顿距离,该距离不是节点到终点的最短距离。根据前篇文章的注意点5,算法找出来的不一定是最短路径。看下图

绿色的点代表起点,红色的点代表终点。灰色的点代表不可通过的路径。
根据文章的算法,从起点开始依次扩展最左边的列的点,左下角的点的F值是180。而左上角的点的F值200.那么,根据文章中的算法,图下半面的点的F值统一是180,直至终点都是180,而左上角的点直至算法结束都不会被扩展。
因此,根据文章中的算法选择的路径就是下半面的唯一的一条通向终点的路径。如下图所示,紫色的格代表了选择的路径。

可是实际上的最短路径是下图所示的路径:

 

 

2,将AStar算法入门文章中的算法和本文前面列出的算法进行比较,可以发现一个区别,就是当某个节点已经在close链表中时。AStar算法入门文章中的算法是当某个节点已经在close链表中时就不会被重新放到open链表再次进行扩展,但是本文前面列出的的算法是当某个节点在close链表中时可以被重新放到open链表中并且重新被扩展。根据注意点2,AStar算法入门文章中的算法是不对的。看下图

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值