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)
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)