python有向图带权最短路径_[算法] Dijkstra算法(带权有向图 最短路径算法)

一、带权有向图

二、算法原理

1)由于我们的节点是从1-6,所以我们创建的列表或数组都是n+1的长度,index=0的部分不使用,循环范围为1-6(方便计算)。

2)循环之前,我们先初始化dis数组和mark数组:

dis数组中保存我们需要求的开始点(start),到其余所有点的最短路径。初始化的时候,只初始化到自己能够直接到的节点的距离,不能直接到的距离初始化为max_int(即sys.maxsize)。

mark保存节点的状态,如果已经被计算过,则状态为True,还未被计算过,则为False

3)开始循环,注意,我们只循环[1,n]的范围。index==0不纳入循环。

4)N==1时,找到所有Dis元素中,对应mark元素为False的元素。找出其中最小值为10,对应的index为3,也就是节点3。然后在weight数组中,找到3能直接到的节点(且对应mark也要为False),这里找到3能直接到4号节点,且权重为50。此时判断dis[3]+50

5)N==2时,找到所有Dis元素中,对应mark元素为False的元素。找出其中最小值为30,对应节点5。然后在weight数组中,找到5能直接到的节点(且对应mark也要为False),为4号和6号节点,且权重为20和60。此时判断dis[5]+20

6)N

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值