python - NetworkX 在有向图中查找特定节点的 root_node

标签 python graph-theory networkx

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

  1. G中有多棵树
  2. G 中的每个节点 N 恰好有 1 或 0 parent 的。

对于特定节点 N1,我想找到它所在树的根节点(它的度数为 0 的祖先)。在网络 x 中是否有一种简单的方法可以做到这一点?

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

最佳答案

edit Nov 2017 请注意,这是在 networkx 2.0 发布之前编写的。有一个 migration guide用于将 1.x 代码更新为 2.0 代码(特别是使其与两者兼容)


这是一个简单的递归算法。它假定最多只有一个单亲。如果某物没有 parent ,它就是根。否则,它返回其父级的根。

def find_root(G,node):
    if G.predecessors(node):  #True if there is a predecessor, False otherwise
        root = find_root(G,G.predecessors(node)[0])
    else:
        root = node
    return root

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

关于python - NetworkX 在有向图中查找特定节点的 root_node,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36488758/

相关文章:

python - 我可以在 SQLAlchemy ORM 上使用 stream_results 吗?

python - 在 Python 或 R 中为给定的度序列生成图

c++ - 遍历整个图的最小节点数

python - 在 python 中使用 networkx 计算无向图中大小为 k 的集团的最佳方法是什么?

python - 使用 Networkx 绘制带边的图

python - 如何使用 Python 捕获 subprocess.call 错误?

python - 同时替换多个字符串

wolfram-mathematica - GraphPlot/GraphPlot3D 中的虚线边

python - 给定一个无环有向图,返回节点集合 "at the same level"的集合?

python - Pandas:在 Dataframe 中填充新列,其中其他 2 列匹配