對A 演算法的路徑進行優化

2021-06-15 01:56:42 字數 1546 閱讀 7234

注:優化最終路徑,必然會對演算法耗時造成一定的影響。

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 系統登錄檔中預設的 被破壞的或殘缺的系統引數,輕鬆提公升系統效能。該軟體已經通過 微軟金牌認證,使用者...