使用弗洛伊德算法(Floyd-Warshall)找到所有对最短路径长度

import networkx as nx 
import matplotlib.pyplot as plt
from matplotlib import font_manager

#使用Floyd算法找到所有对最短路径长度。
G = nx.DiGraph()
G.add_weighted_edges_from([('0', '3', 3), ('0', '1', -5),('0', '2', 2), ('1', '2', 4), ('2', '3', 1)])

#边和节点信息
edge_labels = nx.get_edge_attributes(G,'weight') 
labels={'0':'0','1':'1','2':'2','3':'3'}

#生成节点位置 
pos=nx.spring_layout(G) 
 
#把节点画出来 
nx.draw_networkx_nodes(G,pos,node_color='g',node_size=500,alpha=0.8) 
 
#把边画出来 
nx.draw_networkx_edges(G,pos,width=1.0,alpha=0.5,edge_color='b') 
 
#把节点的标签画出来 
nx.draw_networkx_labels(G,pos,labels,font_size=16) 
 
#把边权重画出来 
nx.draw_networkx_edge_labels(G, pos, edge_labels) 

myfont = font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc")
#显示graph
plt.title('有权图',fontproperties=myfont)
plt.axis('on')
plt.xticks([])
plt.yticks([])
plt.show()

#计算最短路径长度
lenght=nx.floyd_warshall(G, weight='weight')

#计算最短路径上的前驱与路径长度
predecessor,distance1=nx.floyd_warshall_predecessor_and_distance(G, weight='weight')

#计算两两节点之间的最短距离,并以numpy矩阵形式返回
distance2=nx.floyd_warshall_numpy(G, weight='weight')

print(list(lenght))
print(predecessor)
print(list(distance1))
print(distance2)

结果展示在这里插入图片描述

参考链接:
NetworkX系列教程(10)-算法之一:最短路径问题

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值