c++ std::priority_queue是dijkstra队列的正确结构吗?

Is a c++ std::priority_queue the right structure for the dijkstra queue

本文关键字:队列 结构 dijkstra priority std queue c++      更新时间:2023-10-16

我不认为c++优先级队列是dijkstra队列的正确结构,因为它不包含简单查找或删除元素的功能。

正确的结构应该是fibonacci堆,但是std库中没有。

谁有更好的建议,c++实现结构?

可以使用std::set存储pair<distance,>在里面。为了查找和删除元素,你可以在数组中保持与每个顶点的距离,或者在std::vector中获得pair<distance,>对于一个给定的顶点。

最近的未访问顶点总是在集合的第一个元素上(并且可以使用set.begin()得到)。

对于大多数实际用途,基于std::priority_queue的实现对于稀疏图来说已经足够好了。以这种方式实现Dijkstra的运行时为O(E log V)。如果你有一个足够密集的图,你可以简单地使用Dijkstra算法的基本O(V*V)版本。当图变得更密集时,Fib-heap版本的渐近性更接近于vanilla实现。