简单复习最短路算法-Floyd和Dijkstra

Floyd算法是求每一个顶点到每一个顶点间的最短距离,Dijkstra是求指定顶点到其余所有顶点间的最短距离。
**Floyd思想:**不断加入新的中间结点,来判断加入新节点会否使得某点到其余点距离更近。

for i in range(len(V)):	# 中间结点
    for j in range(len(V)):	# 起始顶点
        for k in range(len(V)):	# 结束顶点
            if dist[j][k] > dist[j][i] + dist[i][k]:
                dist[j][k] = dist[j][i] + dist[i][k]

**Dijkstra思想:**在所有顶点集合V之外,定义一个源节点集S,不断往S中添加结点,并计算指定节点A在通过源节点集后到达其余结点的最短距离,并不断更新这个距离。每次选取A通过源节点集能到达的其余所有节点的最近的节点加入源节点集,直到源节点集=顶点集合V。

while V - S != NULL:
    find v_i that can achieve the minist dist[A, v_i] from the set V - S
    S = S U v_i
    for v_j ∈ V - S:
        if dist[A, v_j] > dist[A, v_i] + dist[v_i, v_j]:
            dist[A, v_j] = dist[A, v_i] + dist[v_i, v_j]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值