一种非常简单有效的基于格子的寻路算法

本文介绍了一种适用于格子地图的简单寻路算法,尤其适合手游项目。算法通过逐步扫描并标记相邻格子的距离,找到从起点到终点的最短路径。即使在存在障碍的情况下,也能有效计算最短路径。文中还提到了算法的优化可能性,如减少不必要的格子扫描。
摘要由CSDN通过智能技术生成

这是之前手游项目中琢磨出来的一个简单易行, 同时感觉比较高效的一个寻路算法.  当然有一个前提, 是基于格子的寻路, 你的格子可以是正方形, 六边形等. 总之, 从一个格子移动到旁边任何一个格子的代价是相等的, 也就是步数都是一, 这个算法可能也适应于其它场景, 当然我对寻路算法也没什么研究, 仅仅是解决了我所遇到的问题.


这是一个最短路径寻路算法.


地图如下, 6 * 6,  当时项目中实际的地图尺寸为5 * 14, 没有关系. 原理是一样的. 

假设我们要从1.2(x = 1, y = 2)移动到5.4, 图中的红色部分.


如果地图上没有任何障碍, 那么其中一条(有多条)最短路径可能是 1.2-->2.2-->3.3-->4.4-->5.4, 一共是4步. 算法的实现步聚如下:


1. 开放列表(存放等待扫描其周围的格子) .

将1.2加入到开放列表. 扫描它的周围, 理论上, 如果你是四边形的格子, 那么任何一个格子的周围都有8个格子(不考虑边界), 扫描完后, 记下这8个格子到1.2这个坐标的距离, 都是一步, 所以下面这个图中标记的全是1, 这是第一轮扫描.


2. 将1.2从开放列表中移除(它已经扫描过了), 并将刚才扫描的8个格子加入到开放列表.

3. 扫描这8个格子的周围, 将它们周围未扫描过(已扫描过的不要参与)的格子标记距离为2, 这是第二轮扫描, 结果如下.


4. 依次类推, 扫描完剩余的格子,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值