例如,给定:
G = nx.DiGraph()
G.add_path([0, 1])
G.add_path([0, 2])
G.add_path([0, 3])
G.add_path([1, 11])
G.add_path([1, 12])
G.add_path([2, 21])
G.add_path([2, 22])
G.add_path([3, 31])
G.add_path([3, 32])
我想要这个:
0, 1, 2, 3, 11, 12, 21, 22, 31, 32
为什么bfs_tree
的networkx文档在其示例中实际使用bfs_edges
?而不是bfs_tree
? bfs_tree documentation中给出的示例中的关键字:
print(list(nx.bfs_edges(G,0)))
使用bfs_edge代替,例如via print(list(nx.algorithms.bfs_tree(G, 0).edges()))
似乎导致与示例代码返回的列表相同,但显然更复杂。我可以用更简单的方式使用bfs_tree()
来获取BFS顺序中有向图的_nodes_
列表吗?
当然,我可以迭代从bfs_tree
或bfs_edges
返回的列表,只取第二个元素。但是,有没有更简单的方法?
答案 0 :(得分:1)
为什么不展平边元组列表(每2个节点),然后取set
个节点以确保唯一性?
list(set(sum(list(nx.algorithms.bfs_tree(G, 0).edges()), ())))
在您的假设解决方案中,您将忽略0
节点,并且它不会包含在您的输出中。
或者您可以使用bfs_successors()
方法获取节点的dict(传入0
节点)并获取values
。
[0].extend(nx.algorithms.bfs_successors(G, 0).values())
# Get your first, node, and extend with a list of all successor nodes in BFS order