前言
今天做实验写python,需要建立一个堆(优先队列),对Node类的对象进行排序,堆中会加入Node、每次弹出f值最小的Node。
Node类
需要在Node类中定义小于函数,即__lt__,在这里,f值越小,优先级越大。
# 小于比较
def __lt__(self, other):
return self.get_f() < other.get_f()
heap操作
首先是引入heapq。
from heapq import *
堆是一个list,用heap表示,每次可以向heap中插入一个Node。
a = Node()
a.h = 5
b = Node()
b.h = 7
c = Node()
c.h = 23
heap = []
heappush(heap, b)
heappush(heap, a)
heappush(heap, c)
也可以heap初始化将一开始的Node全部写入,然后建立堆。
heap = [b, a, c]
heapify(heap)
每次弹出优先级最高的Node。
q = heappop(heap)
print(q.get_f())