Python networkx模块求dijkstra最短路径

a)networkx简介:主要用于创造、操作复杂网络,以及学习复杂网络的结构、动力学及其功能。用于分析网络结构,建立网络模型,设计新的网络算法,绘制网络等等。安装networkx看以参见官网
networkx 基本操作请参考
networkx
python图论包networks(最短路,最小生成树带包)

例题如下

如图求下列各节点间最短距离
在这里插入图片描述
代码实现

import networkx as nx
import matplotlib.pyplot as plt
import numpy as np
#定义节点数
nodes=np.array(["v1","v2","v3","v4","v5"])
#定义节点间的距离
row=np.array(["v1","v1","v1","v2","v2","v2","v3","v3","v3","v3","v4","v4","v4","v5","v5","v5"])
col=np.array(["v2","v3","v4","v1","v3","v5","v1","v2","v4","v5","v1","v3","v5","v3","v4","v2"])
value=np.array([2,1,4,2,6,3,1,6,3,8,4,3,7,8,7,3])
#生成无向图
G=nx.Graph()
#给图添加节点
for i in range(0,np.size(nodes)):
    G.add_node(nodes[i])
#添加带权的边
for i in range(0,np.size(row)):
    G.add_weighted_edges_from([(row[i],col[i],value[i])])
#设置网路布局
pos=nx.shell_layout(G)
#画出网络图像
nx.draw(G,pos,with_labels=True, node_color='white', edge_color='b', node_size=800, alpha=0.5)
# plt.ion()  # 打开交互模式
# plt.title("slfe_Net")
# plt.ioff()
# plt.show()
edge_labels = nx.get_edge_attributes(G,'weight')
nx.draw_networkx_edge_labels(G, pos, edge_labels)
plt.draw()
plt.pause(1)# 间隔的秒数:3s
plt.close()


'''
Shortest Path with dijkstra_path
'''
#dijkstra方法寻找最短路径
start,end=input("请输入起止节点用空格分开:").split()
path=nx.dijkstra_path(G, source=start, target=end)
print('节点{0}到{1}的路径:'.format(start,end), path)
distance=nx.dijkstra_path_length(G, source=start, target=end)
print('节点{0}到{1}的距离为:'.format(start,end), distance)



程序说明:此代码运用到matplotlib画图和numpy创建矩阵
运行结果
在这里插入图片描述
在这里插入图片描述
OK 谢谢关注。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值