注:優化最終路徑,必然會對演算法耗時造成一定的影響。
search新增乙個引數,用來代替原本的break_gap常量巨集,在search中,清理記憶體時,將地圖資料恢復。
修改後的源**如下:
bool castar::search(int x, int y, std::list&lresult, double dbgapbreak)
lpapoint p = new apoint;
p->x = x;
p->y = y;
p->parent = null;
p->dbgap = _p2g(x, y, m_dwdestinationx, m_dwdestinationy);
m_lopen.push_front(p);//起始節點加入到開啟列表
m_lsafe.push_back(p);//加入到公共容器,任何新分配的節點,都要加入到這裡,便於演算法執行完後清理
std::list::iterator it;
dword dwtime = clock();
while(!m_lopen.empty())
if(!m_lopen.empty()) }
for(it = m_lsafe.begin(); it != m_lsafe.end(); ++it) }
m_lsafe.clear();//清空容器
//_outf("耗時:%d 毫秒", clock() - dwtime);
if(m_lopen.empty())
m_lopen.clear();//清空開啟列表
//_outf("尋路成功,節點數:%d", lresult.size());
return true;
}
新增的searchex源**如下:
nbeginsift 引數為迴圈初始值,nendsift為迴圈結束值,其實就是乙個for迴圈的起始值與結束值。
這個迴圈的引用計數,最終會被 乘於 10 來作為距離分段選擇路徑進行路線優化
nbeginsift 與 nendsift的間距越大,並不表示最終路徑就越好,最終優化出來的路徑,還是會和地形有關。
其實最好路徑優化演算法是按照角度的變化來選擇路徑優化,但是預計開銷會比較大,有了這個優化方式作為基礎,你可以自己去寫根據角度變化來優化的演算法。
bool castar::searchex(int x, int y, std::list&lresult, double dbgapbreak, int nbeginsift, int nendsift)
it2 = it;
}} }
_outf("耗時:%d 毫秒", clock() - dwtime);
return true;
}
以下為 nbeginsift = 6 nendsift = 15 的優化結果。
測試時間結果:
[3368] 耗時:47 毫秒
如何對Android進行效能優化
android的效能優化多少能代表乙個程式設計師的級別,如果面試的時候,面試官問到你,你是如何對android進行效能優化的,你若簡單的敷衍兩句,那基本認定你就是個初級的程式設計師了。所以作為資深的android工程師,了解效能優化是我們要走的第一步。主要方式布局優化 繪製優化 記憶體洩漏優化 li...
如何對react進行效能優化
react本身就非常關注效能,其提供的虛擬dom搭配上diff演算法,實現對dom操作最小粒度的改變也是非常高效的,然而其元件的渲染機制,也決定了在對元件更新時還可以進行更細緻的優化。在講react生命週期時,就談到過react元件分為了初始化渲染和更新渲染,初始化渲染會呼叫根元件下的所有元件的re...
對window的登錄檔進行優化
regclean pro是一款優秀的登錄檔掃瞄 清理工具,由微軟金牌合作夥伴systweak開發。它具有強大的windows登錄檔檢測及修復功能,可以幫助使用者輕鬆而有效的清理 修復windows 系統登錄檔中預設的 被破壞的或殘缺的系統引數,輕鬆提公升系統效能。該軟體已經通過 微軟金牌認證,使用者...