То, что вы хотите, называется минимальный охват трех . Используя networkx
, вы можете сделать это следующим образом:
import networkx as nx
import matplotlib.pyplot as plt
G = nx.Graph()
G.add_edges_from([(1,2), (1,3), (2,3), (4,5), (4,6), (5,6)])
nx.draw(nx.minimum_spanning_tree(G), with_labels=True)
plt.show()
Однако я немного сомневаюсь, может ли networkx
работать с таким количеством ребер в соответствии с этим тестом . Я протестировал алгоритм connected components
на igraph
, он работал и у меня (и, конечно, намного быстрее), так что вы можете также искать решения на основе igraph
.
Результат