小工具知识网

当前位置: 首页 > 行业知识 > 可达矩阵-邻接矩阵-以及有向图的python绘制

行业知识

可达矩阵-邻接矩阵-以及有向图的python绘制

2026-11-03 17:27:26 来源:互联网转载

参考1

()

���定义输入矩阵来绘制

根据参考代码,

()

自定义

代码如下:

# 编程实现有向图连通性的判断from pylab import mplmpl.rcParams['font.sans-serif'] = ['SimHei']mpl.rcParams['axes.unicode_minus'] = Falseimport numpy as npimport networkx as nximport matplotlib.pyplot as pltimport pylab#定义x三阶矩阵x = np.array([[1, 0, 0], [1, 1, 0], [1, 1, 1]])#随机生成x为五阶矩阵# x = np.random.randint(0, 2, (5, 5))n = len(x)value_1 = value_2 = sum_1 = sum_2 = sum_3 = sum_4 = y = final = xy = x + x.T# 计算可达矩阵for i in range(1, n):    value_1 = np.matmul(value_1, x)    sum_1 = sum_1 + value_1sum_2 = sum_1 + np.identity(n)reachability_matrix = sum_2 > 0.5print("此有向图的可达矩阵为:")print(reachability_matrix.astype(int))final = reachability_matrix + reachability_matrix.Tfor i in range(1, n):    value_2 = np.matmul(value_2, y)    sum_3 = sum_3 + value_2sum_4 = sum_3 + np.identity(n)reachability_matrix_1 = sum_4 > 0.5# 给出判断结果if ((reachability_matrix.astype(int) == np.ones((n, n)).astype(int)).all()):    print("此有向线图G为强连通图或其为无向连通图")elif ((final.astype(int) == np.ones((n, n)).astype(int)).all()):    print("此有向线图G是单向连通图")elif ((reachability_matrix_1.astype(int) == np.ones((n, n)).astype(int)).all()):    print("此有向线图G是弱连通图")else:    print("此有向图不连通")# 下面展示图形化输出有向图GG = nx.DiGraph()for i in range(0, n):    j=i+1    G.add_node(i, desc='p' + str(j))for p in range(0, n):    for q in range(0, n):        if x[p, q] == 1:            G.add_edges_from([(p, q)], weight='1')edge_labels = dict([((u, v), d['weight']) for u, v, d in G.edges(data=True)])edge_colors = ['black']pos = nx.spring_layout(G)node_labels = nx.get_node_attributes(G, 'desc')nx.draw_networkx_labels(G, pos, labels=node_labels)nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels)nx.draw(G, pos, node_size=1500, edge_color=edge_colors, edge_cmap=plt.cm.Reds)plt.title('Directed Graph', fontsize=10)pylab.show()

第二版

增大了字体

可以自定义字体大小

# 编程实现有向图连通性的判断from pylab import mplmpl.rcParams['font.sans-serif'] = ['SimHei']mpl.rcParams['axes.unicode_minus'] = Falseimport numpy as npimport networkx as nximport matplotlib.pyplot as pltimport pylab#定义x三阶矩阵x = np.array([[1, 0, 0], [1, 1, 0], [1, 1, 1]])#随机生成x为五阶矩阵# x = np.random.randint(0, 2, (5, 5))n = len(x)value_1 = value_2 = sum_1 = sum_2 = sum_3 = sum_4 = y = final = xy = x + x.T# 计算可达矩阵for i in range(1, n):    value_1 = np.matmul(value_1, x)    sum_1 = sum_1 + value_1sum_2 = sum_1 + np.identity(n)reachability_matrix = sum_2 > 0.5print("此有向图的可达矩阵为:")print(reachability_matrix.astype(int))final = reachability_matrix + reachability_matrix.Tfor i in range(1, n):    value_2 = np.matmul(value_2, y)    sum_3 = sum_3 + value_2sum_4 = sum_3 + np.identity(n)reachability_matrix_1 = sum_4 > 0.5# 给出判断结果if ((reachability_matrix.astype(int) == np.ones((n, n)).astype(int)).all()):    print("此有向线图G为强连通图或其为无向连通图")elif ((final.astype(int) == np.ones((n, n)).astype(int)).all()):    print("此有向线图G是单向连通图")elif ((reachability_matrix_1.astype(int) == np.ones((n, n)).astype(int)).all()):    print("此有向线图G是弱连通图")else:    print("此有向图不连通")# 下面展示图形化输出有向图GG = nx.DiGraph()for i in range(0, n):    j = i + 1    G.add_node(i, desc='p' + str(j))for p in range(0, n):    for q in range(0, n):        if x[p, q] == 1:            G.add_edges_from([(p, q)], weight='1')edge_labels = dict([((u, v), d['weight']) for u, v, d in G.edges(data=True)])edge_colors = ['black']pos = nx.spring_layout(G)node_labels = nx.get_node_attributes(G, 'desc')nx.draw_networkx_labels(G, pos, labels=node_labels, font_size=16)  # 设置字体大小为16nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels, font_size=12)nx.draw(G, pos, node_size=1500, edge_color=edge_colors, edge_cmap=plt.cm.Reds)plt.title('Directed Graph', fontsize=10)pylab.show()

上一篇:jsp怎么实现分类栏目?

下一篇:民航怎么重启服务器的电脑?