2016-02-28 2 views
1

Учитывая следующий пример:Python NetworkX обнаруживая петли/круги

Есть ли possibilty обнаружить петлю в сети (I1, I2,I3, C6, C7, I5)?

Я пробовал: simple_cycles → он отлично работает с 3-мя узлами, но не более чем 3.

я должен был бы обнаружить круг со всеми узлами и «входной» узел ("I1") и «выход» ("I3") ,

+0

Есть ли у вас какой-либо код, чтобы показать, что вы пытались сделать? –

+1

(I1, I2, I3, C6, C7, I5) не является циклом, потому что ваш график направлен. Вы все еще хотите найти петли (I1, I2, I3, C6, C7, I5)? –

+0

@FlavianHautbois да - мне нужно найти петлю. Есть идеи? – lars111

ответ

3

Я воссоздал свой график, как, например:

import networkx as nx 

g = nx.DiGraph([('P', 'I0'), ('I0', 'I1'), ('I1', 'I2'), 
       ('I2', 'I3'), ('I1', 'I5'), ('I5', 'C7'), 
       ('C7', 'C6'), ('C6', 'I3'), ('I3', 'C9')]) 

Вы искали простых циклов, но нет ни в приведенном выше графике:

>>> list(nx.simple_cycles(g)) 
[] 

так что вы должны искать циклы в неориентированный граф. Вы должны направить свой график на неориентированный граф. Для неориентированных графов, функция cycle_basis является то, что вам кажется, нужно:

>>> nx.cycle_basis(g.to_undirected()) 
[['I5', 'C7', 'C6', 'I3', 'I2', 'I1']] 
+0

отличный - большое спасибо! – lars111

0

Да, если вы используете метод nx.simple_cycles(G), вы получите цикл в графике как набор узлов, которые находятся в цикле (как я его понял). Для получения дополнительной информации проверьте this.

Смежные вопросы