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
Ejemplo n.º 2
0
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__()