import matplotlib.pyplot as plt
import networkx as nx
G1=nx.Graph()# 创建空的无向图
G1.add_weighted_edges_from([(1,2,2),(1,3,8),(1,4,1),
(2,3,6),(2,3,1),
(3,4,7),(3,3,3),(3,6,1),(3,7,2),
(4,7,9),
(3,6,3),(3,8,2),(3,9,9),
(6,7,4),(6,9,6),
(7,9,3),(7,10,1),
(8,9,7),(8,11,9),
(9,10,1),(9,11,2),
(10,11,4)])#向图中添加多条赋权边: (node1,node2,weight)
print('nx.info:',G1.nodes)
#两个指定顶点之间的最短加权路径
minWPath_v1_v11=nx.dijkstra_path(G1,source=1,target=11)# 顶点1到顶点11的最短加权路径
print("顶点 v1 到 顶点 v11 的最短加权路径: ",minWPath_v1_v11)
#两个指定顶点之间的最短加权路径的长度
lMinWPath_v1_v11=nx.dijkstra_path_length(G1,source=1,target=11)#最短加权路径长度
print("顶点 v1 到 顶点 v11 的最短加权路径长度: ",lMinWPath_v1_v11)
pos={1:(0,4),2:(5,7),3:(5,4),4:(5,1),5:(10,7),6:(10,4),7: (10,1),8:(15,7),9:(15,4),10:(15,1),11: (20,4)}# 指定顶点位置
labels=nx.get_edge_attributes(G1,'weight')#设置边的labels为weight
nx.draw(G1,pos,with_labels=True,font_color='w')#绘制无向图
nx.draw_networkx_edge_labels(G1,pos,edge_labels=labels,font_color='#ffc0cb')#边的权值
plt.show()
nx.info: [1, 2, 3, 4, 6, 7, 8, 9, 10, 11] 顶点 v1 到 顶点 v11 的最短加权路径: [1, 2, 3, 7, 10, 9, 11] 顶点 v1 到 顶点 v11 的最短加权路径长度: 9
算法:Dijkstra算法是从起始点开始采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点直到扩展到终点为止。
书籍:《数学建模算法与应用》
本文分享自 图像处理与模式识别研究所 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有