networkx函数minimum_node_cut(G)返回一组与G断开连接的最小基数的节点。但是即使可能存在其他解决方案,它也只返回一组。
我想知道如何得到给定图G的所有这些最小切结点
在扩展中,如何得到基数k的所有节点割集?在
我想不出一种算法能有效地计算出这一点。它是否有比简单的方法更好的方法,即尝试k个节点的每个组合,并检查G是否断开连接?在
编辑:我真的很喜欢大卫·艾森斯塔的答案,但我不能实现它。。我试过了,但是我得到了一个错误,这可能是由于递归性中的错误导致的,并且无法理解它是什么。代码如下:def all_small_cuts(G, k, S=set()):
try:
kappa = nx.node_connectivity(G)
except nx.NetworkXPointlessConcept:
return
if kappa > k - len(S):
return
if kappa == 0: # disconnected
yield S
if len(S) < k:
for node in G.nodes():
G.remove_node(node)
S.update(set(str(node)))
for el in all_small_cuts(G, k, S):
yield el
我刚刚替换了yield from,因为我使用的是python2.7。在