def dijkstra(agraph, start): pq = PriorityQueue() start.setdistance(0) pq.buildheap([(v.getdistance(), v) for v in agraph]) while not pq.isEmpty(): currentvert = pq.delmin() for nextvert in currentvert.get_connections(): newdist = currentvert.getdistance() + currentvert.get_weight( nextvert) if newdist < nextvert.getdistance(): nextvert.setdistance(newdist) nextvert.setpred(currentvert) pq.decreasekey(newvert, newdist)
def prim(g, start): pq = PriorityQueue() for v in g: v.setPred(None) v.setdistance(sys.maxsize) start.setdistance(0) pq = buildheap([(v.getdistance(), v) for v in g]) while not pq.isEmpty(): currentvert = pq.delmin() for nextvert in currentvert.get_connections(): newcost = currentvert.get_weight(nextvert) if nextvert in pq and newcost < nextvert.getdistance(): nextvert.setpred(currentvert) nextvert.setdistance(newcost) pq.decreasekey(nextvert, newcost)