Я делаю неориентированный граф из существующих ребер.
G = nx.Graph()
edge_list = [(1,2),(2,3), (3,4), (4,5),(5,6)]
G.add_edges_from(edge_list)
Теперь я хочу выполнить транзитивное закрытие, которое параметризовано уровнем k
, так что k=1
означает, что будут добавлены следующие новые ребра.
new_edge_list = [(1,3),(2,4),(3,5),(4,6)]
G.add_edges_from(new_edge_list)
Хотя k=2
означает, что будут добавлены следующие новые ребра.
new_edge_list = [(1,3),(1,4),(2,4),(2,5),(3,5), (3,6),(4,6)]
G.add_edges_from(new_edge_list)
Это, по сути, означает, что когда мы продолжаем увеличивать значение k
, график G
в конечном итоге станет кликой (то есть транзитивным замыканием). Однако я хочу получить транзитивное замыкание на определенном уровне k
. Я могу получить полное транзитивное замыкание, используя этот ответ . Но я борюсь с определенным уровнем транзитивного закрытия. Я могу добиться транзитного закрытия k=1
с помощью представления смежности , но его нельзя масштабировать для k=2
. Небольшая помощь будет оценена.
P.S .: Хорошо, если симметричные ребра также создаются как [(1,3),(3,1)]
во время параметрического транзитивного замыкания.