Возможный дубликат:
Поиск всех циклов на графике
Может ли кто-нибудь дать мне учебник, алгоритм ... для обнаружения циклов на графике?
Я нахожу несколько алгоритмов и реализую их, но не обнаруживаю все циклы
Возможный дубликат:
Поиск всех циклов на графике
Может ли кто-нибудь дать мне учебник, алгоритм ... для обнаружения циклов на графике?
Я нахожу несколько алгоритмов и реализую их, но не обнаруживаю все циклы
С математической точки зрения:
Вход: График G = (V, E)
Предположим, что ваш граф не является непересекающимся (между каждыми двумя вершинами существует путь)
Вычислить остовное дерево T графа (для этого есть простые алгоритмы)
Пусть E 'будет подмножеством E, которое не принадлежит остовному дереву T. Для каждого ребра e в E' его добавление к дереву создает ровно один цикл. Поместим все эти циклы в набор B.
Мы определяем пространство двоичных циклов по циклам на вашем графике. В это пространство можно добавить два цикла. Сложение - это просто исключительная сумма по краям.
Набор циклов B является «основой цикла». Любой другой цикл на вашем графике может быть сформирован как линейная комбинация циклов B.
Таким образом вы получите все возможные циклы на вашем графике.
Предупреждение: если ваш входной граф имеет v вершин и e ребер, то имеется 2 ^ (e - v +1) -1 разных циклов! Это довольно много - возможно, вы не захотите явно писать их все.
BFS alg. тоже нормально. Я считаю, что это проще реализовать, чем DFS, поскольку он хранит посещаемые / посещаемые узлы в очереди. Проще проверить, были ли уже посещены определенные узлы.
Я думаю, что DFS выполнит вашу работу, потому что мы отмечаем посещенный узел, и если мы снова найдем этот узел, есть цикл
1 -> 2 2 -> 3 1 -> 3 Теперь в этом случае мы выполняем dfs (1). Это приведет к вызову dfs (2) и отметке 2 как посещенных. Это вызовет dfs (3) и отметит 3 как посещенные. теперь dfs (3) снова будет вызываться из узла 1, и, поскольку он уже был посещен, вы неправильно сделаете вывод, что это цикл
- person Purav Shah; 03.04.2012
networkx. Это действительно просто! Я дал подробный ответ в следующем сообщении: stackoverflow.com/questions/546655/finding-all-cycles-in-graph/ - person fernandosjp   schedule 28.10.2016