使用networkx从图表中删除边缘

时间:2016-09-16 22:02:29

标签: python algorithm networkx

我正在尝试将DiGraph转换为n-ary树并按级别顺序或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')])

树:从这个question借用数据并对其进行适当修改:

n---->n1--->n11
 |     |--->n12
 |     |--->n13
 |-----------|--->n131 
 |--->n2              
 |     |---->n21     
 |     |---->n22     
 |------------|--->n221 
 |--->n3

现在我的真实数据集中有数百个节点要复杂得多,为了保持简单,我已经使用了上面的图表。

我想从树中删除不必要的边缘,这样如果父节点对子节点具有边缘,则边缘与孙子节点相同,父节点也具有边缘。我很简单想要删除孙子和父(root)之间的边缘,因为这使我的图表变得复杂。 例如:我想从上图中删除('n', 'n131')('n', 'n221')。实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

看起来你想要找到图G的最小生成树,你可以使用Prim或Kruskal算法的实现:这里有一个来自scipy:http://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.sparse.csgraph.minimum_spanning_tree.html