我正在尝试将一个
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')])
G.add_edges_from([('n13', 'n131'), ('n22', 'n221')])
关于树:借用自这个问题的数据:
n---->n1--->n11
| |--->n12
| |--->n13
| |--->n131
|--->n2
| |---->n21
| |---->n22
| |--->n221
|--->n3
我正在使用networkx.DiGraph
来实现这一目的,并成功创建了该图。以下是我创建DiGraph的代码:
G = nx.DiGraph()
roots = set()
for l in raw.splitlines():
if len(l):
target, prereq = regex1.split(l)
deps = tuple(regex2.split(prereq))
print("Add node:") + target
roots.add(target)
G.add_node(target)
for d in deps:
if d:
G.add_edge(target, d)
我正在阅读一个大约有200行的文件,格式如下,尝试获取一个依赖树。我的图大约有100个节点和600条边。
AAA: BBB,CCC,DDD,
BBB:
DDD: EEE,FFF,GGG,KKK
GGG: AAA,BBB,III,LLL
....
...
..
.
在查看了网络X在线文档之后,现在我可以通过对依赖树进行拓扑排序来实现级别顺序输出,以下是代码。
order = nx.topological_sort(G)
print "topological sort"
print order
输出:
['n2', 'n3', 'n1', 'n21', 'n22', 'n11', 'n13', 'n12', 'n221', 'n131']
订单似乎是正确的,但由于我需要批量处理作业(这可以节省时间),而不是按顺序处理,因此我希望输出按级别有序批处理或使用BFS。如何实现最佳方法?
例如:级别[0:n],例如:
0. ['n']
1. ['n2', 'n3', 'n1',]
2. ['n21', 'n22', 'n11',]
3. ['n13', 'n12', 'n221', 'n131']
networkx.single_source_shortest_path_length
来获取从根节点到其他节点的距离。 - Aric