简单描述下A*寻路

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

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

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

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

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

流程如下:

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

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

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

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

不考虑权重且

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(游戏AI)