采取下图:
G = nx.DiGraph()
G.add_edge(1,2)
G.add_edge(3,2)
G.add_edge(1,4)
G.add_edge(2,5)
Run Code Online (Sandbox Code Playgroud)
可视化给出:
我想找到仅具有从 开始的“子图”内的传入边的叶节点1。
在我的示例中,它必须找到4但不是5。5是其子级,2其具有3第二个输入。
我认为它应该是有后继者和 in_ Degree 的东西,但我是 NetworkX 的新手,很难找到正确的算法。
另一个例子:
G = nx.DiGraph()
G.add_edge(1,2)
G.add_edge(3,2)
G.add_edge(1,4)
G.add_edge(2,5)
G.add_edge(4,6)
G.add_edge(1,7)
G.add_edge(7,6)
G.add_edge(1,8)
G.add_edge(8,7)
G.add_edge(8,6)
G.add_edge(4,9)
G.add_edge(4,10)
G.add_edge(5,10)
Run Code Online (Sandbox Code Playgroud)
在这里应该找到9和6。但不是10(因为3作为父母的2父母5。
小智 6
以下代码比其他答案更紧凑并且运行速度更快。
roots = [v for v, d in G.in_degree() if d == 0]
leaves = [v for v, d in G.out_degree() if d == 0]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1652 次 |
| 最近记录: |