示例#1
0
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)
示例#2
0
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)