Exemplo n.º 1
0
class FibPQ(PQueue):
    def __init__(self):
        self.heap = FibHeap()

    def __len__(self):
        return self.heap.count

    def insert(self, node):
        return self.heap.insert(node)

    def minimum(self):
        return self.heap.minimum()

    def removeMinimum(self):
        return self.heap.removeMinimum()

    def decreaseKey(self, node, newPriority):
        return self.heap.decreaseKey(node, newPriority)
Exemplo n.º 2
0
            prev[node] = None
            visited[node] = True
            heapNodeIndex[node] = fibHeap.insert(0.0, node)
        else:
            dist[node] = float('inf')
            prev[node] = None
            visited[node] = False
            heapNodeIndex[node] = fibHeap.insert(float('inf'), node)

    node = src
    while node != tar:
        node = fibHeap.extractMin().value
        print("======")
        print(node)
        visited[node] = True
        for neighbor in graph.vertices[node].neighbors:
            print(neighbor)
            if visited[neighbor]:
                continue
            tmp = dist[node] + graph.GetEdgeWeight(node, neighbor)
            if tmp < dist[neighbor]:
                dist[neighbor] = tmp
                prev[neighbor] = node
                fibHeap.decreaseKey(heapNodeIndex[neighbor], tmp)

    result = [tar]
    while tar != src:
        tar = prev[tar]
        result.insert(0, tar)
    print(result)