如何提取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
相关产品推荐
相关产品推荐

