寻路方法很多都把A*当成标准,它确实很不错.Fringe Search边缘搜索比A*要好些,在内存使用和速度上都有改善.
这是参照了<游戏编程精粹7>中"超越A*: IDA*和边缘搜索",论文"Fringe Search: Beating A* at Pathfinding on Game Maps"和论文"Fringe Search vs. A* for NPC movement".
这是一开始实现的一个版本,还有些可以优化的地方.该算法具体细节的和A*和IDA*的比较的详细信息参看论文,论文总结的是效率比完全优化的A*高10%~40%的样子.
以前弄A*时候有个测试用的项目,就拿那项目改了下就完成了这个算法,整体来说比A*简单(估计应该是在熟悉A*的情况下觉得简单).后面代码,结构和效率都还需要调整下.它的搜索结果和A*还有区别(最短路径不只一条),如何调整要参考论文.然后,如果不需要记录路径,只要搜索结果的话可以不保存已经过的节点,cachelist可以不要的.
实现代码:
测试代码:
测试数据:
输出结果: