You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取PriorityQueue的最小值?(Dijkstra算法学习场景)

解决PriorityQueue提取最小值的问题

Python标准库中的PriorityQueue默认是小顶堆结构,提取最小值直接调用get()方法即可。另外你代码里判断队列是否为空的写法有误,应该用Q.empty()来判断,而非Q != 0。

修正后的代码片段

from queue import PriorityQueue

Q = PriorityQueue()
# 建议调整元组顺序:把距离放在第一位,这样队列会按距离优先级排序
Q.put((dist[start], start))

while not Q.empty():
    # 取出当前优先级最高(值最小)的元素
    min_dist, u = Q.get()
    # 后续可使用u(节点)和min_dist(对应距离)进行Dijkstra算法逻辑处理

关键说明

  • PriorityQueue.put()存入的元组会自动按第一个元素的大小排序,所以Dijkstra算法中通常把「距离」作为元组第一个元素,「节点」作为第二个,这样取出的就是当前距离最小的节点,符合算法需求。
  • 如果坚持用原代码的元组顺序(start, dist[start]),队列会按节点值的大小排序,这不符合Dijkstra算法优先选择距离最小节点的逻辑,不推荐。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 06:10:50