• 弗洛伊德算法


    一、求无向图中两节点的最短距离

      

     1.要实现Floyd算法,首先需要构建带权图的邻接矩阵:

    在邻接矩阵当中,每一个数字代表着从某个顶点到另一个顶点的直接距离,这个距离是没有涉及到任何中继顶点的

     

     2.此时假定只允许以顶点A作为中继顶点,那么各顶点之间的距离会变成什么样子呢?

      B和C之间的距离原本是无穷大,此时以A为中继,距离缩短为AB距离+AC距离=5+2=7。更新对应矩阵元素(橙色区域代表顶点A到其他顶点的临时距离):

     

     

     3.接下来以顶点A、B作为中继顶点,那么各顶点之间的距离会变成什么样子呢?

      A和D之间的距离原本是无穷大,此时以B为中继,距离缩短为AB距离+BD距离=5+1=6。

      A和E之间的距离原本是无穷大,此时以B为中继,距离缩短为AB距离+BE距离=5+6=11。

      更新对应矩阵元素(橙色区域代表顶点B到其他顶点的临时距离):

     

     4.接下来以顶点A、B、C作为中继顶点,那么各顶点之间的距离会变成什么样子呢?

      A和F之间的距离原本是无穷大,此时以C为中继,距离缩短为AC距离+CF距离=2+8=10。

      更新对应矩阵元素(橙色区域代表顶点C到其他顶点的临时距离):

     

     

     以此类推,我们不断引入新的中继顶点,不断刷新矩阵中的临时距离。最终,当所有顶点都可以作为中继顶点时,我们的距离矩阵更新如下:

    此时,矩阵中每一个元素,都对应着某顶点到另一个顶点的最短距离

     

  • 相关阅读:
    requets中urlencode的问题
    洛谷$P4503 [CTSC2014]$企鹅$QQ$ 哈希
    洛谷$P5446 [THUPC2018]$绿绿和串串 $manacher$
    洛谷$P5329 [SNOI2019]$字符串 字符串
    洛谷$P1390$ 公约数的和 欧拉函数
    洛谷$P4318$ 完全平方数 容斥+二分
    入门懵逼钨丝繁衍
    $ CometOJ-Contest#11 D$ $Kruscal$重构树
    洛谷$P4884$ 多少个1? 数论
    入门数论简单总结
  • 原文地址:https://www.cnblogs.com/always-fight/p/10855658.html
Copyright © 2020-2023  润新知