python图最短路径_python数据结构与算法——图的最短路径(Floyd-Warshall算法)

使用Floyd-Warshall算法 求图两点之间的最短路径

不允许有负权边,时间复杂度高,思路简单

# 城市地图(字典的字典)

# 字典的第1个键为起点城市,第2个键为目标城市其键值为两个城市间的直接距离

# 将不相连点设为INF,方便更新两点之间的最小值

INF = 99999

G = {1:{1:0, 2:2, 3:6, 4:4},

2:{1:INF, 2:0, 3:3, 4:INF},

3:{1:7, 2:INF, 3:0, 4:1},

4:{1:5, 2:INF, 3:12, 4:0}

}

# 算法思想:

# 每个顶点都有可能使得两个顶点之间的距离变短

# 当两点之间不允许有第三个点时,这些城市之间的最短路径就是初始路径

# Floyd-Warshall算法核心语句

# 分别在只允许经过某个点k的情况下,更新点和点之间的最短路径

for k in G.keys(): # 不断试图往两点i,j之间添加新的点k,更新最短距离

for i in G.keys():

for j in G[i].keys():

if G[i][j] > G[i][k] + G[k][j]:

G[i][j] = G[i][k] + G[k][j]

for i in G.keys():

print G[i].values()

结果:

[0, 2, 5, 4]

[9, 0, 3, 4]

[6, 8, 0, 1]

[5, 7, 10, 0]

python数据结构与算法——

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值