设为首页 加入收藏

TOP

对A*算法的路径进行优化 (二)
2015-11-21 01:23:03 来源: 作者: 【 】 浏览:11
Tags:算法 路径 进行 优化
循环的引用计数,最终会被 乘于 10 来作为距离分段选择路径进行路线优化

nBeginSift 与 nEndSift的间距越大,并不表示最终路径就越好,最终优化出来的路径,还是会和地形有关。

其实最好路径优化算法是按照角度的变化来选择路径优化,但是预计开销会比较大,有了这个优化方式作为基础,你可以自己去写根据角度变化来优化的算法。


[cpp]
bool CAStar::SearchEx(int X, int Y, std::list &lResult, double dbGapBreak, int nBeginSift, int nEndSift)?
{?
??? DWORD dwTime = clock();?
??? if(!Search(X, Y, lResult, dbGapBreak))?
??????? return false;?
??? std::list::iterator it = lResult.begin();?
??? std::list::iterator it2 = it;?
?????
??? std::list l2;?
??? for(int i = nBeginSift; i < nEndSift; i++)?
??? {?
??????? it = lResult.begin();?
??????? it2 = it;?
??????? for(;it != lResult.end(); ++it)?
??????? {?
??????????? if(_p2g(it2->x, it2->y, it->x, it->y) > (double)(i * 10))?
??????????? {?
??????????????? SetDestinationPos(it->x, it->y);?
??????????????? l2.clear();?
??????????????? if(Search(it2->x, it2->y, l2, 0.0))?
??????????????? {?
??????????????????? it = lResult.erase(it2, it);?
??????????????????? lResult.insert(it, (l2.begin()), (l2.end()));?
??????????????? }?
??????????????? it2 = it;?
??????????? }?
??????? }?
??? }?
?????
??? _outf("耗时:%d 毫秒", clock() - dwTime);?
??? return true;?
}?

bool CAStar::SearchEx(int X, int Y, std::list &lResult, double dbGapBreak, int nBeginSift, int nEndSift)
{
?DWORD dwTime = clock();
?if(!Search(X, Y, lResult, dbGapBreak))
??return false;
?std::list::iterator it = lResult.begin();
?std::list::iterator it2 = it;
?
?std::list l2;
?for(int i = nBeginSift; i < nEndSift; i++)
?{
??it = lResult.begin();
??it2 = it;
??for(;it != lResult.end(); ++it)
??{
???if(_p2g(it2->x, it2->y, it->x, it->y) > (double)(i * 10))
???{
????SetDestinationPos(it->x, it->y);
????l2.clear();
????if(Search(it2->x, it2->y, l2, 0.0))
????{
?????it = lResult.erase(it2, it);
?????lResult.insert(it, (l2.begin()), (l2.end()));
????}
????it2 = it;
???}
??}
?}
?
?_outf("耗时:%d 毫秒", clock() - dwTime);
?return true;
}

?

?

?

以下为 nBeginSift = 6????? nEndSift = 15 的优化结果。


测试时间结果:

[3368] 耗时:47 毫秒

?

?

\vcnRo/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" />

?

?

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇10161 - Ant on a Chessboard 下一篇[C++STDLib基础]关于C++string字..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: