Networkx图与网络工具包

1.Networkx是什么?
简单说一下,Networkx是一个构建网络和图的工具包,可以求解最短路问题,也可以求最大流,还可以专门用来画精美的网络图。这里我主要讲下Networkx构建图时,怎么用csv文件导入数据构建有权重的图。
2.构建一个图

from __future__ import print_function
import networkx as nx
import matplotlib.pyplot as plt
import csv

# 定义一个图
G = nx.Graph()

# 将边转换为元组!(u,v,w)均为数字,csv文件为三列,两列为起点和终点,第三列为权重。
f = open('文件路径.csv', 'r')
csv_reader = csv.reader(f)
font_weight = tuple(csv_reader)
# 将权重添加到边上
G.add_weighted_edges_from(font_weight)

3.绘制一个图

# 画图,spring_layout是个布局方式,node_size是节点大小,with_lable是否显示图的标签。
nx.draw(G, pos=nx.spring_layout(G),  node_size=80, with_labels=True, color='black')
plt.show()

Networkx绘制的图形
4.求两点之间的可行路径和最短路径

# 输出可行路径
simple_path = nx.all_simple_paths(G, '1', '10')
for n in simple_path:
    print(n)

# 输出1到10的最短路径
p1 = nx.shortest_path(G, source='1', target='10')
print(p1)

['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']

5.获取两条边之间的权重

# 获取点与点之间的数据
get_nodes_weight = G.get_edge_data('1', '2')
print(get_nodes_weight)

6.求出最短路对应的最短距离,只能求出点数,不能给出实际距离,求大佬告知,如何求出实际距离

# 计算最短路径长度,没有带权重的
p2 = nx.shortest_path_length(G, source='1', target='10')
print(p2)

9

猜你喜欢

转载自blog.csdn.net/qq_34399105/article/details/89371160