加权图dijkstra算法和Bellman-Ford算法计算最短路径

一、dijkstra_path有权图最短路径 和 贝尔曼-福特(Bellman-Ford)算法

import networkx as nx 
import matplotlib.pyplot as plt

column1 = []
with open('node-9.txt','r') as f:
    line = f.readline() # 读取一行
    while line:
        txt_data = eval(line) # 可将字符串变为元组
        column1.append(txt_data) # 列表增加
        line = f.readline() # 读取下一行
#print(column1)

edge = []
with open('edge-9.txt','r') as f:
    line = f.readline() # 读取一行
    while line:
        txt_data = eval(line) # 可将字符串变为元组
        edge.append(txt_data) # 列表增加
        line = f.readline() # 读取下一行
#print(edge)

G = nx.DiGraph()
G.add_nodes_from(column1)
G.add_weighted_edges_from(edge)
 
 
nx.draw_networkx(G,pos=nx.shell_layout(G),node_size=20,node_shape='o',width=1,style='solid',font_size=8) 


plt.show()
#print ( G.nodes())


print("weight_clustering")
cl = nx.clustering(G,weight='weight')
for v in G.nodes():
    print(v, cl[v])
    
    
print("clustering")
cl = nx.clustering(G)
for v in G.nodes():
    print(v, cl[v])

#dijkstra_path有权图最短路径    
path1 = dict(nx.all_pairs_dijkstra_path(G))
length1 = dict(nx.all_pairs_dijkstra_path_length(G))
#print('\n两两节点之间最短加权路径和长度: ',path1,length1)

path2 = dict(nx.all_pairs_dijkstra_path(G,weight='weight'))
length2 = dict(nx.all_pairs_dijkstra_path_length(G,weight='weight'))
#print('\n两两节点之间最短加权路径和长度: ',path1,length1)

#print('\n两两节点之间最短加权长度: ',length1)
#print('\n两两节点之间最短加权长度: ',length2)
#print('\n两两节点之间最短加权路径: ',path1)
#print('\n两两节点之间最短加权路径: ',path2)
#print('输出节点的权重')
#print(G.edges[0,5]['weight'])

#贝尔曼-福特(Bellman-Ford)算法
print('G中从源到目标的最短加权路径: ',nx.bellman_ford_path(G, 0, 4))
print('\nG中从源到目标的最短加权路径的长度:',nx.bellman_ford_path_length(G,0,4))

path1=nx.single_source_bellman_ford_path(G,0)
length1 = dict(nx.single_source_bellman_ford_path_length(G, 0))
print('\n单源节点最短加权路径和长度: ',path1,'\n单源节点最短加权路径和长度: ',length1)

path2 = dict(nx.all_pairs_bellman_ford_path(G))
length2 = dict(nx.all_pairs_bellman_ford_path_length(G))
print('\n两两节点之间最短加权路径和长度: ',path2,length2)

length, path = nx.single_source_bellman_ford(G, 0)
pred, dist = nx.bellman_ford_predecessor_and_distance(G, 0)
print('\n加权图最短路径长度和前驱: ',pred,dist)

参考:
图论——networkx——最短路径算法篇

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值