циклы определения графика - простое объяснение

9

Могут ли некоторые помочь мне понять, как найти циклы в графах в терминах дилетантов?

Я читал другие вопросы, такие как этот, а также некоторые страницы википедии, но они, похоже, довольно быстро превращаются в математический жаргон.

У меня есть модель графика в java, узлы моделирования, а также ребра «in» и «out» - и модель знает узлы, соединенные только в одном направлении, это позволяет мне найти конечные узлы в качестве отправной точки, мой план был пройтись назад по графику от каждого из этих конечных узлов, для каждой "прогулки", сохранив список всех других узлов, которые я нашел на своем маршруте. Если я когда-нибудь увижу что-то в списке, я буду знать, что нашел график на графике. Это, однако, кажется немного упрощенным.

Я уверен, что это решенная проблема, было бы неплохо, если бы ее можно было объяснить простыми словами.

-ACE

phatmanace
источник

Ответы:

6

Самый простой способ объяснить циклы определения графиков в терминах непрофессионала - это что-то вроде этого:

  • Во-первых, я предполагаю, что вы знаете основы того, что такое граф, и что такое узлы и ребра. В этом примере предполагается, что у вас есть график, в котором все ребра односторонние.
  • Создайте свой график и выберите один узел в качестве отправной точки.
  • Создайте какой-нибудь контейнерный объект (список или хеш будет работать лучше). Назовите это «Посещенный».
  • Создайте второй контейнерный объект (здесь идеально подходит очередь) и назовите его «Open».
  • Добавьте начальный узел в список Open.
  • Повторите, пока открытый список не пуст:
    • Удалите первый элемент из Open и назовите его Current
    • Если Current существует в Visited, у вас есть цикл.
    • Если нет, добавьте Current в Visited, а затем добавьте все узлы, к которым Current может обратиться из его исходящих ребер, в Open.
  • Если Open заканчивается пустым и циклы не обнаружены, то у вас нет циклов. (По крайней мере, не в наборе достижимости, исходящем из начальной точки, которая не обязательно является полной частью вашего графа, если у вас есть острова в вашем графе.)
Мейсон Уилер
источник
0

По сути, вы сначала выполняете поиск по графику и отслеживаете, какие узлы вы посетили, используя хэш-карту.

В любой момент времени, если вы встретите узел, который уже был посещен (присутствует в hashmap), то вы знаете, что на графике есть цикл.

agent13
источник