QQ超市最佳路径寻路算法改进尝试2

昨天一直在琢磨,看怎样能缩短时间。

函数、方法、判断什么的都没办法改进了。那就只有改善算法了。

后来总算想到一个还算可行的办法。

当如上图的情况下,很明显往后再怎么寻路,都不可能到达终点。

加个判断直接把此节点false掉岂不是能节省大部分的无用递归?

那如何判断呢?当point(2,5)遍历寻找四周可用节点进行递归之前,

先调用A*寻路看所有可用节点能否到达终点即可。无法到达则放弃。

此图里面,point(2,5)是被放弃的,后面省去的递归数至少好几千。

 

而如果每次递归之前调用A*的话,总时间是会翻好几番的。到底A*花的时间多,

还是省去的递归时间多,那就只能实际测试一下才知道了。

 

于是花了大量时间把A*独立出来,修改传入2个参数 a:要测试的可用节点,b:目前位置的路径(A*里面的作用就是障碍)。

搞定后用经典的1店4口进行测试,测试结果如下!

改善前 改善后
总路径数:95306 总路径数:95306
最大路径数:12 最大路径数:12
最大面数:52 最大面数:52
耗时:25秒 耗时:115秒
总递归数:3990114 总递归数:953791

递归数如预期般的大幅减少至测试前的25%!

可耗时涨了4倍多……经过测试,A*一共花了78秒……太悲哀了……

后来把A*改为深度优先,也没什么太大改善。

 

这次改善宣布失败><...

posted @ 2012-03-20 21:16  妖気  阅读(517)  评论(0编辑  收藏  举报