[英]Is a c++ std::priority_queue the right structure for the dijkstra queue
我認為c ++優先級隊列不是dijkstra隊列的正確結構,因為它不包含用於輕松查找或刪除元素的功能。
正確的結構將是斐波那契堆,但std庫中沒有。
有沒有人提出更好的C ++實現結構的建議?
您可以使用std::set
並在其中存儲pair <distance,vertex>。 要查找和刪除元素,可以保持到數組或std::vector
每個頂點的距離,以快速獲取給定頂點的pair <distance,vertex>。 最接近的未訪問頂點始終位於set的第一個元素中(可以使用set.begin()
獲得)。
對於大多數實際目的,基於std::priority_queue
的實現足以用於稀疏圖。 以這種方式實現Dijkstra的運行時為O(E log V)
。 如果您有足夠密集的圖,則可以簡單地使用Dijkstra算法的基本O(V*V)
版本。 隨着圖變得更密集,Fib-heap版本的漸近性逐漸接近於香草實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.