简单描述下A*寻路

纯文字总结,不会涉及具体代码。

A*寻路,其实本质上就是Dijkstra寻路的一种加料版。

所以,可以先看看什么是Dijkstra寻路。

此寻路中,连通的节点间存在着通过的消耗值(泥泞的土地消耗就比平坦的道具大)

而节点本身拥有一个代表从起点到此节点本身之间所有的消耗值。

流程如下:

每次观察当前节点周围可抵达的节点,计算并赋予每个邻居他的消耗总值(当前节点的总消耗加上通过的消耗),并把他们加入一个待选集合(算法从来没有观察到过的邻居节点总是需要加入的,或者是第二次被当作了邻居节点且花费比上次少时)(集合一般是优先队列)

下一次从集合中拿出一个总花费最少的节点,重复以上步骤(基于这样一个事实,当前可能的最佳路径永远是从当前花费最少的节点开始的),直到邻居节点中出现了终点。

而A*加料版只是在节点被加入待选集合时,给他再加上另一个参考值,也就是该节点与终点横纵坐标的差的和。(直观上过滤掉了明显反向于终点的可选节点)

而所谓的广度优先,深度优先搜索,其实就是这种寻路的特化版:

不考虑权重且

广度优先的待选节点集合为队列 / 深度优先的待选节点集合为栈

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值