Найти Гамильтонову цепь в непрерывном графе - Prolog

Узнай цену своей работы

Формулировка задачи:

Найти Гамильтонов цепи в непрерывном графе

Решение задачи: «Найти Гамильтонову цепь в непрерывном графе»

textual
Листинг программы
  1. гамильтонова_цепь(Граф, Путь) :-
  2.   число_вершин(Граф, N),
  3.   вершина(Граф, Начальная_вершина),
  4.   гамильтонова_цепь_рекурсивно(Граф, N, 1, [Начальная_вершина], Путь).
  5.  
  6. гамильтонова_цепь_рекурсивно(_, N, N, Путь, Путь) :-
  7.   !.
  8. гамильтонова_цепь_рекурсивно(Граф, N, K, Текущий_путь, Путь) :-
  9.   Текущий_путь = [Текущая_вершина|Хвост],
  10.   ребро(Граф, Текущая_вершина, Новая_вершина),
  11.   not(member(Новая_вершина, Текущий_путь)),
  12.   K1 is K + 1,
  13.   гамильтонова_цепь_рекурсивно(Граф, N, K1, [Новая_вершина | Текущий_путь], Путь).
  14.  
  15. гамильтонов_цикл(Граф, Путь) :-
  16.   число_вершин(Граф, N),
  17.   вершина(Граф, Начальная_вершина),
  18.   !,  %% <- для гамильтонова цикла неважно, с какой вершины его начинать
  19.   гамильтонов_цикл_рекурсивно(Граф, Начальная_вершина, N, 1, [Начальная_вершина], Путь).
  20.  
  21. гамильтонов_цикл_рекурсивно(Граф, Начальная_вершина, N, N, Путь, Путь) :-
  22.   !,
  23.   ребро(Граф, Текущая_вершина, Начальная_вершина).
  24. гамильтонов_цикл_рекурсивно(Граф, Начальная_вершина, N, K, Текущий_путь, Путь) :-
  25.   Текущий_путь = [Текущая_вершина|Хвост],
  26.   ребро(Граф, Текущая_вершина, Новая_вершина),
  27.   not(member(Новая_вершина, Текущий_путь)),
  28.   K1 is K + 1,
  29.   гамильтонов_цикл_рекурсивно(Граф, Начальная_вершина, N, K1, [Новая_вершина | Текущий_путь], Путь).

Объяснение кода листинга программы

  1. Гамильтонова цепь в непрерывном графе - это последовательность вершин, которую можно пройти таким образом, что для каждой вершины она содержит все смежные вершины (вершины, связанные с данной ребрами).
  2. В коде используется два метода: гамильтонова_цепь и гамильтонов_цикл.
  3. Метод гамильтонова_цепь используется для поиска Гамильтоновой цепи в непрерывном графе.
  4. Метод гамильтонов_цикл используется для поиска Гамильтонова цикла в непрерывном графе.
  5. В методе гамильтонова_цепь_рекурсивно происходит рекурсивный вызов метода для каждой вершины, которую нужно посетить.
  6. В методе гамильтонов_цикл_рекурсивно происходит рекурсивный вызов метода для каждой вершины, которую нужно посетить.
  7. В обоих методах используется базовый случай, когда количество вершин равно количеству ребер в цикле.
  8. В обоих методах используется условие, чтобы проверить, является ли текущая вершина ребра частью текущего пути.
  9. Если текущая вершина является ребра, то происходит рекурсивный вызов метода с новым хвостом и новым количеством ребер.
  10. Если текущая вершина является вершиной, то происходит рекурсивный вызов метода с новым хвостом и без изменения количества ребер.
  11. Для гамильтонова цикла неважно, с какой вершины начинать, поэтому используется оператор !.
  12. В обоих методах используется стек для хранения вершин, которые нужно посетить.
  13. В обоих методах используется список для хранения пути.
  14. Количество ребер в цикле не должно превышать количество вершин в графе.
  15. Для гамильтонова цикла необходимо, чтобы начальная вершина была связана с каждой другой вершиной.
  16. В обоих методах используется рекурсия для обхода всех вершин графа.
  17. В обоих методах используется условие, чтобы проверить, является ли текущая вершина ребра частью текущего пути.
  18. Если текущая вершина является ребра, то происходит рекурсивный вызов метода с новым хвостом и новым количеством ребер.
  19. Если текущая вершина является вершиной, то происходит рекурсивный вызов метода с новым хвостом и без изменения количества ребер.
  20. В обоих методах используется стек для хранения вершин, которые нужно посетить.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.778 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы