网络连通系数是衡量网络抗毁性的一种重要指标
# -*- coding: utf-8 -*-
"""
Created on Sat Mar 6 13:50:15 2021
@author: Administrator
"""
import networkx as nx
import networkx.algorithms.components as com
#计算一个网络的连通系数
def get_connect_factor():
G = nx.Graph()
filestr = ""
with open("all.txt") as files:
for line in files:
filestr += line.strip()
#将字符串转换成列表
matrix = eval(filestr)
nodes = range(len(matrix))
G.add_nodes_from(nodes)
for i in range(len(matrix)):
for j in range(len(matrix)):
if(matrix[i][j] == 1):
G.add_edge(i, j)
#蝴蝶网络中总的节点数目
n = len(G.nodes())
# print(n)
#获得网络中连通分支的数目
w = com.number_connected_components(G)
# print(w)
end = []
#获得每一个连通分支的平均最短路径
for cc in sorted(com.connected_components(G),key = len):
#获得每一个连通分支
suG = G.subgraph(cc).copy()
#获得每一个连通分支的平均最短路径长度
ss = nx.average_shortest_path_length(suG)
# print(ss)
#获得每一个连通分支中的节点数目
suN = len(suG.nodes())
# print(suN)
end.append((suN /float(n)) * ss)
# print(end)
c = 1.0 /(w * sum(end))
print("网络的连通系数为:")
print(c)
get_connect_factor()