Как из исходного графа сделать новый граф с вершинами соответствующими рёбрам исходного графа?

Как, имея исходный граф, сделать из него новый граф, в котором вершины будут соответствовать рёбрам исходного графа, то есть - сделать рёберный граф?

Например, исходный граф:

import networkx as nx

G = nx.Graph()
G.add_nodes_from([1, 2, 3, 4, 5, 6])
G.add_edges_from([(1, 5), (1, 3), (1, 2), (1, 4), (5, 6), (4, 6)])

Пронумеровала рёбра графа (сделала их вершинами), таким образом закинула в словарь:

vertices_of_the_new_graph = dict(zip(graph.edges(), graph.nodes()))

Каким образом можно составить рёбра нового графа, основываясь на смежности рёбер в изначальном графе? И стоит ли вообще использовать словарь?

Необходимо привести новый граф к виду начального, т.е. с методами .add_nodes_from() и .add_edges_from().


Ответы (1 шт):

Автор решения: MaxU

Если я правильно понял вопрос - можно воспользоваться nx.line_graph():

L = nx.line_graph(G)

результат:

In [102]: print(L.edges())
[((1, 2), (1, 4)), ((1, 2), (1, 5)), ((1, 2), (1, 3)), ((1, 3), (1, 5)), ((1, 3), (1, 4)), ((1, 4), (1, 5)), ((1, 4), (4, 6)), ((1, 5), (5, 6)), ((5, 6), (4, 6))]

In [103]: print(L.nodes())
[(1, 2), (1, 3), (1, 4), (1, 5), (5, 6), (4, 6)]

исходный граф: введите сюда описание изображения

рёберный граф: введите сюда описание изображения

→ Ссылка