Python A*算法的简单实现

总起

A*算法常用于游戏的寻路中,用于求解静态路网中的最短路径,是最有效的直接搜索方法。

这次正好花了几天时间学习了一下Python,便拿这个算法做了一下练习。这篇文章也会对其思路做一个简单介绍。

文章中的源码可以在 GitHub - anguangzhihen/PythonTest 中的AStarTest.py找到。

算法思路

A*算法实际是由广度优先遍历和Dijkstra算法演变而来的:

1.广度优先遍历主要是通过从起点依次遍历周围的点而寻找最优的路径;

2.Dijkstra基本思路跟广度优先遍历一样,只不过给每次遍历的点增加了一个权值,用于表明当前移动了多少距离,然后每次从移动最短距离的点开始遍历;

3.A*在Dijkstra算法增加了一个期望值(启发函数,h),最优化遍历节点的数量。

广度优先遍历 -> Dijkstra算法 -> A*算法。其他寻路相关的算法也很多,如JPS跳点算法,但解决问题的侧重点不同,关键是针对具体问题选择合适的算法。

我们先来看一下地图,橙点为起始点和终点:

 

本文中,g为已走过的距离,h为期望距离、启发值。文中会频繁使用这两个概念。

A*算法中的h,根据实际地图的拓扑结构,可选用以下三种距离,假设A与B点横纵坐标距离x和y:

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值