狄克斯特拉算法 python实现(未注释)21.10.3

def Search_low(name):
    #cost为到该点的总价格
    #cost=costs[name]
    #把要查的节点name的邻居全拿出来
    newcost=[]


    for son in graph[name]:
        #newcost=哈希表中相邻的价格
        if (son not in used) and (son not in faused):
            newcost.append(graph[name][son])
            print(son,"son666")

        #找到最小花费的儿子

    newcost.sort()
    if(len( newcost )):
        tool=newcost.pop(0)
    else:
        return None




    for son in graph[name]:
        if tool==graph[name][son]:
            return son



def Search(name):
    #查花费最少的son B
    father=Search_low(name)

    #循环开始
    while father not in faused :
        name=father
        for son in graph[name].keys():
            newson=Search_low(father)
            if newson ==None:
                break

            newcost=graph[father][newson]

            if newcost + costs[father] < costs[newson]:
                costs[newson]=newcost + costs[father]
                parents[newson]=father
            used.append( newson )

        used.clear()
        faused.append(father)
        father = Search_low( name )

        for newfather in graph.keys():
            if newfather not in faused and newfather!="start":
                 father =newfather
                 break
        if father==None:
            break
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值