NetworkX在有向图中找到特定节点的root_node

时间:2016-04-07 23:08:05

标签: python graph-theory networkx

假设我在网络X中有一个有向图G,那么:

  1. G里面有多棵树
  2. G中的每个节点N都恰好为1或0 父母的。
  3. 对于特定节点N1,我想找到它所在树的根节点(其祖先的度数为0)。在网络x中有一种简单的方法吗?

    我看了看: Getting the root (head) of a DiGraph in networkx (Python) 但是我的图中有多个根节点。只有一个根节点恰好与N1位于同一个树中。

2 个答案:

答案 0 :(得分:4)

编辑2017年11月请注意,这是在networkx 2.0发布之前编写的。有migration guide用于将1.x代码更新为2.0代码(特别是使其兼容)

这是一个简单的递归算法。它假定最多只有一个父母。如果某些东西没有父母,那么它就是根。否则,它返回其父节点的根。

 <appSettings>
    <add key="owin:AutomaticAppStartup" value="false" />
  </appSettings>

如果图是一个有向非循环图,它仍会找到一个根,虽然它可能不是唯一的根,甚至是给定节点的唯一根祖先。

答案 1 :(得分:1)

我冒昧地更新了@ Joel的剧本。他原来的帖子对我不起作用。

{'larry': 0, 'tom': 0, 'dick': 0}

这是一个测试:

def find_root(G,child):
    parent = list(G.predecessors(child))
    if len(parent) == 0:
        print(f"found root: {child}")
        return child
    else:  
        return find_root(G, parent[0])