c++ std::priority_queue是dijkstra队列的正确结构吗?
Is a c++ std::priority_queue the right structure for the dijkstra queue
我不认为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实现。
相关文章:
- C++ 中优先级队列的结构排序条件
- 优先级经常更改的作业优先级队列的数据结构
- C++ 数据结构队列:使用 for 循环查找队列中最大的元素
- 从 STL 优先级队列C++ (QtCreator) 打印结构
- C 在标题文件中创建具有结构定义的结构的队列
- 在 stl 中迭代结构类型的队列
- 从指针队列访问结构的成员
- 使用提升库在队列和堆栈数据结构上保存和加载数据时出错
- 优先队列中的结构比较
- C 单例结构队列
- 我的字符串队列结构有什么问题?
- 结构类似优先级队列,但具有类似下界的内容
- 使用队列<结构时出现 SIGSEGV 错误 *>
- 工作线程队列的这种变体是某种模式或通用结构吗?
- 排序结构的队列
- 在队列中推动结构变量
- 从头开始实现队列结构 (C++)
- 队列结构会产生奇怪的错误
- c++中队列结构中的Struct节点
- 使用队列结构c++的离散事件模拟