针对有向图G,寻找每个节点的最大传播路径长度。
如果一个节点没有邻居节点,则传播路径长度为0;
有向图,可能存在闭环路径,会造成在闭环回路中进行传播,陷入死循环;
def get_max_path_list(G):
path_len = []
for node in tqdm(list(g.nodes)):
for _ in list(g.nodes):
g.nodes[_]["state"]=0
g.nodes[node]["state"]=1
k = 0
node_nbor = list(g.neighbors(node))
if len(node_nbor) == 0:
path_len.append(k)
else:
while True:
k += 1
new_nbor = []
for node in node_nbor:
g.nodes[node]["state"] = 1
for node in node_nbor:
if len(list(g.neighbors(node))) == 0:
pass
else:
for N in list(g.neighbors(node)):
if g.nodes[N]["state"]==1:
pass
else:
g.nodes[N]["state"] = 1
new_nbor.append(node)
if len(new_nbor) == 0:
path_len.append(k)
break
else:
node_nbor = new_nbor
return path_len
例如输入python networkx构建的有向图,共551个节点:
import networkx as nx
import matplotlib.pyplot as plt
from collections import Counter
edges = []
'''
网络结构从边关系文件加载格式为列表,列表的元素是一个节点对的元组例如
edges = [(1,2),(1,3),(3,4),...]
'''
G = nx.DiGrap()
G.add_edges_from(edges)
nx.draw(G,node_color='red',node_size=20)
path_lenght = get_max_path_list(G)
length_distribute = Counter(path_length)
print(length_distribute)
输出查看结果Counter({0: 375, 1: 172, 2: 4})。路径长度为0的节点375个,长度为1的172个,长度为2的四个。