Любой эффективный алгоритм, чтобы найти все циклы в неориентированном графе? - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь найти все циклы в неориентированном графе и не нашел ни одного алгоритма для того же самого ни в одном онлайн-сайте / geeksforgeeks.

Существует один для ориентированного графа (алгоритм Джонсона), ноон не работает (желательно o / p) для ненаправленных.

Любые предложения будут оценены.

1 Ответ

0 голосов
/ 08 ноября 2019

Подход: используя метод раскраски графа, отметьте все вершины разных циклов уникальными числами. Как только обход графа завершен, поместите все похожие отмеченные числа в список смежности и распечатайте список смежности соответственно. Ниже приведен алгоритм:

  • Вставьте ребра в список смежности.
  • Вызовите функцию DFS, которая использует метод раскраски для обозначения вершины.
  • Всякий раз, когда есть частично посещенная вершина, возвращайтесь назад, пока текущая вершина не будет достигнута, и пометьте их все номерами циклов. Как только все вершины отмечены, увеличьте номер цикла.
  • Как только Dfs завершены, выполните итерацию для ребер и вставьте ребра с таким же отмеченным номером в другой список смежности.
  • Выполните итерацию в другом списке смежности и напечатайте номер цикла вершины по номеру.

Сложность времени: O (N + M), где N - номер вершины, а M - это числоколичество реберВспомогательное пространство: O (N + M)

Источник: https://www.geeksforgeeks.org/print-all-the-cycles-in-an-undirected-graph/

Вы также можете найти код там.

...