В пакете python networkx существует ли способ найти все node разрезы минимального размера, состоящие только из узлов из одного набора в двудольном графе? Например, если две стороны двудольного графа A и B, как я могу найти все минимальные сокращения node, состоящие из узлов целиком из множества B? Следующий код у меня есть, но он очень медленный:
def get_one_sided_cuts(G, A, B):
#get all cuts that consist of nodes exclusively from B which disconnect
#nodes from A
one_sided_cuts = []
seen = []
l = list(combinations(A, 2))
for x in l:
s = x[0]
t = x[1]
cut = connectivity.minimum_st_node_cut(G, s, t)
if set(cut).issubset(B) and (cut not in seen):
one_sided_cuts.append(cut)
seen.append(cut)
#find minimum cut size
cur_min = float("inf")
for i in one_sided_cuts:
if len(i) < cur_min:
cur_min = len(i)
one_sided_cuts = [x for x in one_sided_cuts if len(x) == cur_min]
return one_sided_cuts
Обратите внимание, что это фактически проверяет, есть ли минимальный разрез, который, если его удалить, отключит два узла только в A. Если ваше решение делает это (вместо того, чтобы найти разрез, который будет разделять любые два узла), это тоже хорошо. Любые идеи о том, как сделать это более эффективно?