def shorted_path(G, src): dist = {} pred = {} n = 0 infinity = sys.maxint for v in G.keys(): dist[v] = infinity pred[v] = None n +=1 dist[src] = 0 bh = BinaryHeap(n, src, infinity) while not bh.isEmpty(): u = bh.pop() for v, w in G[u]: newLen = dist[u] + w if newLen < dist[v]: dist[v] = newLen bh.decreaseKey(v, newLen) pred[v] = u return dist, pred
class PriorityQueue: def __init__(self): self.queue = BinaryHeap() # log(n) worst case (both time and space) def enqueue(self, elem): self.queue.insert_element(elem) # log(n) worst case (both time and space) def dequeue(self): return self.queue.extract_min() def peek_min(self): return self.queue[0] def isEmpty(self): return self.queue.isEmpty() def __str__(self): return self.queue.__str__()