- •В. Н. Степанов дискретная математика: графы и алгоритмы на графах
- •Предисловие
- •1. Основные понятия теории графов
- •1.1. Граф и его разновидности
- •1.2. Морфизмы графов
- •1.3. Степени вершин
- •1.4. Маршруты, цепи, циклы, связность
- •1.5. Операции над графами
- •1.6. Примеры графов
- •1.7. Метрические характеристики графов
- •1.8. Представления графов
- •2. Алгоритмы и сложность
- •2.1. Понятие алгоритма
- •2.2. Сложность алгоритма
- •2.3. Запись алгоритма
- •3. Обходы графов
- •3.1. Поиск в глубину на графе
- •3.2. Поиск в ширину на графе
- •3.3. Алгоритм выделения компонент связности
- •4. Деревья
- •4.1. Деревья. Свойства деревьев
- •4.2. Остовы. Теорема Кирхгофа
- •4.3. Теорема Кэли
- •4.4. Фундаментальная система циклов. Цикломатическое число
- •4.5. Алгоритм отыскания фундаментального множества циклов на графе
- •5. Остов минимального веса. Алгоритм Краскала и Прима
- •5.1. Алгоритм д. Краскала
- •5.2. Алгоритм р. Прима
- •6. Кратчайшие пути между вершинами графа
- •6.1. Алгоритм Дейкстры
- •6.2. Алгоритм Флойда
- •7. Эйлеровы графы
- •7.1. Теорема Эйлера
- •7.2. Алгоритм Флёри
- •8. Гамильтоновы графы
- •8.1. Гамильтоновы маршруты. Задача коммивояжера
- •8.2. Существование гамильтоновых маршрутов
- •9. Алгоритмы отыскания гамильтоновых циклов
- •9.1. Алгоритм с возвратом (полного перебора)
9. Алгоритмы отыскания гамильтоновых циклов
9.1. Алгоритм с возвратом (полного перебора)
Пусть G – произвольный граф с n вершинами. Опишем алгоритм, позволяющий найти в графе G все гамильтоновы циклы или выдать сообщение, что таких циклов нет. Пусть – произвольная вершина графа G. Рассмотрим некоторый гамильтонов цикл
.
Легко понять, что если мы научимся строить все максимальные простые цепи с началом в вершине , то задача о нахождении гамильтоновых циклов будет решена. Действительно, пусть
– максимальная простая цепь с началом в вершине . Если и вершина смежна с вершиной , то, добавляя к цепи P ребро , получим гамильтонов контур.
Пусть – множество всех простых цепей, имеющих начало в вершине . Для произвольных цепей положим , если цепь P является началом цепи Q. Отношение на множестве является отношением частичного порядка. Максимальные элементы частично упорядоченного множества называются максимальными простыми цепями с началом в вершине .
Алгоритм, позволяющий перечислить по одному разу все гамильтоновы циклы графа G, многократно выполняет следующую работу: имея текущую простую цепь
,
он по очереди добавляет к ней новые вершины, продолжая ее до всевозможных максимальных простых цепей с началом в вершине .