python - 在 Python 中使用 networkx 列出所有生成树
问题描述
我需要一种方法来获取 Python 中给定图形的所有生成树。我正在使用networkx,它可以获得最小权重树,但我需要所有可能的生成树(作为列表、生成器或其他)。有没有一种简单的方法可以做到这一点?
编辑:澄清一下,我知道它的计算成本很高,我只需要它来处理小图(最多 7-10 个顶点)。
解决方案
我最终编写了以下代码。
def spanning_trees(G):
def build_tree(H, edges):
if H.is_connected():
yield H
else:
for i in range(len(edges)):
if edges[i][1] not in nx.algorithms.descendants(H, edges[i][0]):
H1 = Graph(H)
H1.add_edge(*edges[i])
for H2 in build_tree(H1, edges[i+1:]):
yield H2
E = Graph()
E.add_nodes_from(G)
return build_tree(E, [e for e in G.edges])
它可以很容易地处理 8 个顶点上的完整图,但我不是编码专家,所以可能有一些优化空间。有什么建议吗?
推荐阅读
- shell - 使用 shell -e -x 避免 Shell 22 错误代码
- c++ - 使用对(成员)函数返回的对象的引用是否安全甚至可能?
- c++ - 速度比较:先加零或检查非零
- excel - 选择和删除多行
- ruby-on-rails - 为什么我的条纹元素表格在轨道上不起作用?
- c++ - 在 C++ 中将浮点数截断为最接近 2 的幂 - 性能
- angular - 带有 xmlHttpRequest 的角度加载文件
- nix - 对于全新的 Nix 安装,SSL 对等证书或 SSH 远程密钥不正确 (60)
- java - 我的 removeDownTo() 方法没有显示正确的输出
- wordpress - 如何在 WordPress 中设置登录页面 URL?