在有向图中查找结束节点

BER*_*ERA 5 python networkx

我有很多像这样的子图:

import networkx as nx
G = nx.DiGraph()
G.add_edges_from([(2,1),(3,1),(1,4)])
nx.draw(G)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我想找到所有的起始节点和结束节点。所以我用:

startnodes = [x for x in G.nodes() if G.out_degree(x)==1 and G.in_degree(x)==0]
endnode = [x for x in G.nodes() if G.out_degree(x)==0 and G.in_degree(x)==1][0]
print(startnodes, endnode)
[2, 3] 4
Run Code Online (Sandbox Code Playgroud)

但有些子图如下所示,末端节点的度数为 2。我怎样才能找到它的结束节点?

G.add_edges_from([(2,1),(3,1)]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Pru*_*une 7

每一项都只有一个考虑因素:

  • 结束节点是没有任何“出”边的节点。
  • 起始节点是没有任何“入”边的节点。

就这样。如果您还需要识别子图,则只需从每个起始节点执行任何标准闭包操作即可。如果这些子图具有公共节点,则合并子图。