Подход: используя метод раскраски графа, отметьте все вершины разных циклов уникальными числами. Как только обход графа завершен, поместите все похожие отмеченные числа в список смежности и распечатайте список смежности соответственно. Ниже приведен алгоритм:
- Вставьте ребра в список смежности.
- Вызовите функцию DFS, которая использует метод раскраски для обозначения вершины.
- Всякий раз, когда есть частично посещенная вершина, возвращайтесь назад, пока текущая вершина не будет достигнута, и пометьте их все номерами циклов. Как только все вершины отмечены, увеличьте номер цикла.
- Как только Dfs завершены, выполните итерацию для ребер и вставьте ребра с таким же отмеченным номером в другой список смежности.
- Выполните итерацию в другом списке смежности и напечатайте номер цикла вершины по номеру.
Сложность времени: O (N + M), где N - номер вершины, а M - это числоколичество реберВспомогательное пространство: O (N + M)
Источник: https://www.geeksforgeeks.org/print-all-the-cycles-in-an-undirected-graph/
Вы также можете найти код там.