特别大的地图A*算法优化思路

本文介绍在大型地图中优化A*寻路算法的方法,包括使用优先队列管理可搜索节点、设置搜索深度限制避免长时间卡顿、通过增大地图瓦块减少节点数量、采用多线程并行寻路以及将地图分块进行逐段寻路等策略。

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

  • 搜索优化:

小技巧:

1.openList(用于存放可以搜索的点)使用优先队列来实现。

优先队列(小顶堆):插入一个点的复杂度为O(logN),取出一个最值点复杂度为O(1) 

2.深度限制:有时要搜的路径非常长,利用A*算法搜一次付出的代价很高,造成游戏的卡顿。那么为了保证每次搜索不会超过一定代价,可以设置深度限制,每搜一次则深度+1,搜到一定深度限制还没搜到终点,则返还失败值。

针对大地图优化:

1.把地图瓦块变大减少节点数量。

2.多线程寻路(适用于多个角色同时寻路)。

3.把大地图分块,分成n个小地图:

如果起点和终点相隔几个小地图,那么寻路流程如下:

step1:根据起点和终点的方向算出走出当前小地图出口点,用A*寻路到出口点。

(注:当前小地图出口点也就是要经过的下一个小地图的入口点)

step2:让角色向下一个小地图的入口点移动,(移动的过程中可以继续寻下个小地图的出口路径,或者到达出口点后再寻路)

step3:若下一个小地图不是终点所在的地图,那么把这个入口点作为起点重复step1:根据入口点到终点的方向计算出,当前小地图的出口点,用A*找到出口点的路径。

若一个小地图是终点所在小地图那么就再用A*寻路到终点即可。

可以走到每个小地图的入口点后再对这个小地图的出口寻路

4.网格地图简化成路标形式(减少网格节点)

注:变成路标形式后每个节点之间的路径不再是1了,而是节点之间的实际距离

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值