狄克斯特拉算法

graph = {}
costs = {}
parents = {}
processed = []

def find_lowest_cost_node(costs):
    lowest_cost = float("inf")
    lowest_cost_node = None
    for node in costs:      #遍历所有的节点
        cost = costs(node)
        if cost < lowest_cost and node not in processed:    #如果当
            lowest_cost = cost      #就将其视为开销最低的节点
            lowest_cost_node = node
    return lowest_cost_node

node = find_lowest_cost_node(costs)   #在未处理的节点中找到开销最小
while node is not None:     #这个while循环在所有节点都被处理过后结
    cost = costs[node]
    neighbors = graph[node]
    for n in neighbors.keys():      #遍历当前节点的所有邻居
        new_cost = cost + neighbors[n]
        if costs[n] > new_cost:     #如果经当前节点前往改邻居更近
            costs[n] = new_cost     #就更新该邻居的开销
            parents[n] = node       #同时将该邻居的父节点设置为当前
    processed.append(node)      #将当前节点标志为处理过
    node = find_lowest_cost_node(costs)     #找出接下来要处理的节点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值