floyd原理介绍及一个简单例子便于理解

  Floyd算法是一种图论算法,用于求解任意两点之间的最短路径。它的核心思想是动态规划,通过不断更新节点之间的距离,最终得到最短路径。

  Floyd算法的原理很简单,它的基本思路是利用中间节点来优化路径。具体来说,它通过枚举每一个节点作为中间节点,更新两个节点之间的距离。这样,每次更新后,所有节点之间的距离都会得到优化。最终得到的矩阵就是任意两点之间的最短路径。

  Floyd算法的时间复杂度为O(N^3),其中N为节点数。虽然时间复杂度比较高,但是Floyd算法具有很好的可扩展性和适用性。它可以处理有向图、无向图、带权图等各种情况,并且不需要知道图的具体结构。

  下面是一个用Python实现Floyd算法的示例代码:

INF = float('inf')

def floyd(graph):
    n = len(graph)
    dist = [[INF] * n for _ in range(n)]
    for i in range(n):
        for j in range(n):
            dist[i][j] = graph[i][j]
    for k in range(n):
        for i in range(n):
            for j in range(n):
                if dist[i][j] > dist[i][k] + dist[k][j]:
                    dist[i][j] = dist[i][k] + dist[k][j]
    return dist

if __name__ == '__main__':
    graph = [
        [0, 3, INF, 7],
        [8, 0, 2, INF],
        [5, INF, 0, 1],
        [2, INF, INF, 0]
    ]
    res = floyd(graph)
    for row in res:
        print(row)

  在这个示例中,我们定义了一个INF常量表示无穷大,用于表示两个节点之间没有路径。然后我们定义了一个floyd函数,它接受一个邻接矩阵作为输入,并返回任意两点之间的最短路径。具体实现过程中,我们首先将邻接矩阵复制到一个新的矩阵中,然后通过枚举中间节点来更新两个节点之间的距离。最终得到的矩阵就是任意两点之间的最短路径。

  在上面的示例中,我们定义了一个4个节点的图,然后调用floyd函数求解任意两点之间的最短路径。运行结果如下:

[0, 3, 5, 6]
[5, 0, 2, 3]
[3, 6, 0, 1]
[2, 5, 7, 0]

  这个结果表示任意两点之间的最短路径。例如,第一行第二列的值为3,表示节点1和节点2之间的最短路径长度为3。

  总之,Floyd算法是一种非常实用的图论算法,可以用于求解任意两点之间的最短路径。虽然时间复杂度比较高,但是它具有很好的可扩展性和适用性。如果你需要处理图论问题,不妨考虑使用Floyd算法。

编写不易,求个点赞!!!!!!!
“你是谁?”

“一个看帖子的人。”

“看帖子不点赞啊?”

“你点赞吗?”

“当然点了。”

“我也会点。”

“谁会把经验写在帖子里。”

“写在帖子里的那能叫经验贴?”

“上流!”
cheer!!!

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大不怪将军

如果帮助到你,我很开心

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

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

打赏作者

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

抵扣说明:

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

余额充值