狄克斯特拉算法

文章介绍了如何运用狄克斯特拉算法在加权图中寻找从起点到目标点的最短路径,同时强调了该算法不适用于包含负权边的情况。通过创建图、开销表、存储父节点的散列表以及处理过的节点列表,逐步更新节点成本并找到最低成本路径。
摘要由CSDN通过智能技术生成

使用狄克斯特拉算法可以找出加权图中前往X的最短路径。

狄克斯特拉算法不适用于负权边。

#实现图
graph={}
graph["start"]={}
graph["start"]["a"]=6
graph["start"]["b"]=2
graph["a"]={}
graph["a"]["fin"]=1
graph["b"]={}
graph["b"]["a"]=3
graph["b"]["fin"]=5
graph["fin"]={}

#创建开销表
infinity=float('inf')
costs={}
costs["a"]=6
costs["b"]=2
costs["fin"]=infinity

#创建存储父节点的散列表
parents={}
parents["a"]="start"
parents["b"]="start"
parents["fin"]=None

#创建记录处理过的节点的列表
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:
    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)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天下弈星~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值