我正在尝试转换DiGraph
成n叉树并按层序或BFS显示节点。我的树与此类似,但更大,为简单起见,使用以下示例:
G = networkx.DiGraph()
G.add_edges_from([('n', 'n1'), ('n', 'n2'), ('n', 'n3')])
G.add_edges_from([('n4', 'n41'), ('n1', 'n11'), ('n1', 'n12'), ('n1', 'n13')])
G.add_edges_from([('n2', 'n21'), ('n2', 'n22'), ('n', 'n22')])
G.add_edges_from([('n13', 'n131'), ('n22', 'n221'), ('n', 'n131'), ('n', 'n221')])
Tree:借用了this的数据question https://stackoverflow.com/questions/21866902/networkx-graph-searches-dfs-successors-vs-dfs-predecessors并进行适当修改:
n---->n1--->n11
| |--->n12
| |--->n13
|-----------|--->n131
|--->n2
| |---->n21
| |---->n22
|------------|--->n221
|--->n3
现在我的真实数据集要复杂得多,有数百个节点,为了简单起见,我使用了上图。
我想从树中删除不必要的边,这样,如果父项对子项有一条边,子项对孙子有另一条边,并且父项对孙子也有一条边。我只是想删除孙子和父级(根)之间的边缘,因为这使我的图表变得复杂。
例如:我想删除('n', 'n131')
and ('n', 'n221')
从上图可以看出。实现这一目标的最佳方法是什么。