一、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)-算法之一:最短路径问题