【发布时间】:2014-02-21 11:22:10
【问题描述】:
我一直在努力实现 Dijkstra 的算法;更具体地说,具有优先级队列的部分。将顶点添加到数据结构中并使用迭代器遍历所有顶点并找到最小距离;这很容易,但 n 次。
我想要的是:
- 能够将顶点插入到数据结构中
- 提取(返回并移除)距离dist[v]最小的顶点v
我相信,为了让 Dijkstra 算法正常工作,您应该能够在恒定时间内插入顶点并在 log(n) 时间内提取它们;并且有人建议我可以使用优先级队列和最小堆,但对我来说,保持队列或最小堆有序似乎并不现实,因为距离会不断修改。
那么我应该如何声明和使用优先级队列、最小堆或其他数据结构来做到这一点?
【问题讨论】:
标签: c++ algorithm queue priority-queue dijkstra