Я использую эти алгоритмы в python для нахождения связанных компонентов из ребер.Список ребер подключенных компонентов Python
components = []
def connected_components(pairs):
for a, b in pairs:
for component in components:
if a in component:
for i, other_component in enumerate(components):
if b in other_component and other_component != component: # a, and b are already in different components: merge
component.extend(other_component)
components[i:i+1] = []
break # we don't have to look for other components for b
else: # b wasn't found in any other component
if b not in component:
component.append(b)
break # we don't have to look for other components for a
if b in component: # a wasn't in in the component
component.append(a)
break # we don't have to look further
else: # neither a nor b were found
components.append([a, b])
return components
Эти алгоритмы возвращают компоненты, как это:
[ [n1,n2,n4],[n3,n5] ]
Я хотел бы иметь список всех ребер связных компонент, как это:
[ [(n1,n2),(n2,n4),(n4,n1)],[(n3,n5)] ]
в том же порядке, из Предыдущий список, но я не знаю, как создает этот список
Благодарим за помощь.
Как выглядят ваши входы? –
У scipy есть функция для этого: scipy.sparse.csgraph.connected_components – JB1
Спасибо за ваш ответ, входы это поток списка краев, подобный этому: [(a1, a2), (a6, a9)] – Guillaume