寻找有向图网络中每个节点的最大传播路径长度

针对有向图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的四个。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值