class SP(object): def __init__(self, G, s): self.G = G self.s = s self.h = Heap(self.G.V()) for i in range(self.G.V()): self.h.insert(i, self.G.adjmat[self.s][i]) self.adjlist = [[0, 0, 0] for i in range(self.G.V())] self.count = 0 def disttov(self, v): adjmat = self.G.adjmat n = self.G.V() if adjmat[self.s][v] != -1: return adjmat[self.s][v] return 100000 def hasPathtov(self, v): dis = self.disttov(v) if dis != 100000: return True return False def display(self): print("shortest path from source ", self.s) for x in self.adjlist: print("Vertex: ", x[0], " Distance: ", x[1], " Predecessor: ", x[2]) def dijkstraSP(self): for i in range(self.G.V()): vert = self.h.DeleteMin() self.adjlist[self.count][0] = vert[0] self.adjlist[self.count][1] = vert[1] self.relax(vert[0]) self.count += 1 self.display() def relax(self, v): for adjedge in self.G.adj(v): if (adjedge.weightv() + self.G.adjmat[self.s][v] ) < self.G.adjmat[self.s][adjedge.tov()]: self.h.DecreaseKey( adjedge.tov(), adjedge.weightv() + self.G.adjmat[self.s][v]) self.adjlist[adjedge.tov()][2] = v
from Heap import Heap heap = Heap() # heap.BuildHeap([9,5,6,2,3]) heap.Insert(9) heap.Insert(5) heap.Insert(6) heap.Insert(2) heap.Insert(3) heap.Print() print(heap.DeleteMin()) heap.Print() print(heap.DeleteMin()) heap.Print() print(heap.DeleteMin()) heap.Print()