栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Floyd算法-求最短路径

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Floyd算法-求最短路径

理解

代码

# -*- coding: utf-8 -*-
"""
Created on Fri May  6 13:54:10 2022

Floyd算法
    用途:计算任意两点之间的最短路径
    复杂度:时间复杂度O(n^3)
    算法核心:
        直接相连D[i][j],加入K节点后间接相连D[i][k]+D[k][i]
        比较这种相连方式,哪种路径更短,将其作为两者的最短路径
"""
import numpy as np
def Floyd(D,n):
    for k in range(n):
        for i in range(n):
            for j in range(n):
                if(D[i][j]>D[i][k]+D[k][j]):
                    D[i][j]=D[i][k]+D[k][j]
        print("第{}次".format(k+1))
        print(D)

D=np.array([[0,2,np.inf,1,8],
            [6,0,3,2,np.inf],
            [np.inf,np.inf,0,4,np.inf],
            [np.inf,np.inf,2,0,3],
            [3,np.inf,np.inf,np.inf,0]])        
Floyd(D,5)

结果

第1次
[[ 0.  2. inf  1.  8.]
 [ 6.  0.  3.  2. 14.]
 [inf inf  0.  4. inf]
 [inf inf  2.  0.  3.]
 [ 3.  5. inf  4.  0.]]
第2次
[[ 0.  2.  5.  1.  8.]
 [ 6.  0.  3.  2. 14.]
 [inf inf  0.  4. inf]
 [inf inf  2.  0.  3.]
 [ 3.  5.  8.  4.  0.]]
第3次
[[ 0.  2.  5.  1.  8.]
 [ 6.  0.  3.  2. 14.]
 [inf inf  0.  4. inf]
 [inf inf  2.  0.  3.]
 [ 3.  5.  8.  4.  0.]]
第4次
[[ 0.  2.  3.  1.  4.]
 [ 6.  0.  3.  2.  5.]
 [inf inf  0.  4.  7.]
 [inf inf  2.  0.  3.]
 [ 3.  5.  6.  4.  0.]]
第5次
[[ 0.  2.  3.  1.  4.]
 [ 6.  0.  3.  2.  5.]
 [10. 12.  0.  4.  7.]
 [ 6.  8.  2.  0.  3.]
 [ 3.  5.  6.  4.  0.]]
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/861324.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号