
- •Изоморфизм
- •Матричное задание графа
- •Свойства матрицы смежности
- •Операции над графами
- •Достижимость и связность
- •Матрицы достижимости и контрдостижимости
- •Нахождение сильных компонент
- •Конденсация графа
- •Базы и антибазы
- •Построение компонент связности в неориентированном графе
- •Построение компонент связности в ориентированном графе
- •Система независимых циклов
- •Дерево. Остов граф
- •Процесс восстановления дерева по набору
- •Алгоритм построения произвольного остова
- •Определение минимального остова
- •Алгоритм построения системы независимых циклов графа
- •Модификация Форда
- •Алгоритмы поиска всех кратчайших путей
- •Алгоритм Флойда
- •Алгоритм Флойда
- •Алгоритм Данцига
- •Алгоритм Данцига
- •Раскраска
- •Метод построения функции Гранди на графе
- •Гамильтоновы пути, контуры и задача Коммивояжера
- •Метод Роберта и Флореса (перебор-метод для орграфов)
- •Алгоритм поиска увеличивающего пути
- •Алгоритм поиска максимального потока
- •Алгоритм Форда и Фалкерсона
- •Модификация алгоритма поиска максимального потока при нескольких источниках и стоках
- •Алгоритм поиска потока минимальной стоимости
- •Алгоритм поиска потока минимальной стоимости
- •Алгоритмы построения покрывающих деревьев
Гамильтоновы пути, контуры и задача Коммивояжера
Гамильтонов путь в графе – это путь, проходящий через каждую его вершину один и только один раз.
Гамильтонов контур – это контур, проходящий через каждую вершину (за исключением начальной или конечной), которая совпадает один и только один раз.
Рассмотрим две задачи:
Дан орграф G. Требуется найти Гамильтонов контур, если он существует.
Дан полный орграф G, дугами которого приписаны произвольные веса C = {Cij}. Найти такой Гамильтонов контур, который имеет наименьший общий вес.
Эту задачу называют задачей Коммивояжера.
Замечание:
Если заданный орграф G неполный, то его можно рассматривать как полный орграф, приписывая отсутствующим дугам бесконечно большой вес.
Необходимо сделать n деталей, используя один и тот же станок. При переходе от производства детали i к детали j необходимо на перенаватку станка затратить время {Cij}. В частном случае С = 0.
Ставится задача нахождений такой последовательной обработки деталей, которая не требует перенаватки станка.
Для решения этой задачи строят граф G, вершины которого являются деталями, а существование дуги (i, j) означает, что при переходе от детали i к детали j не требуется перенаватки станка.
Решение задачи существует тогда, когда построенный граф будет иметь Гамильтонов контур.
Если предыдущая задача не имеет решения, то решаем задачу определения такой
Транспортные задачи связаны с объездом рядов пунктов и возвращением в исходный.
Задачи соединения отдельных пунктов электро-газоснабжения.
В настоящее время нет простых критериев или алгебраических методов, позволяющих выяснить: существует или нет в произвольном графе G Гамильтонов контур.
Существующие алгебраические методы определения Гамильтоновых контуров из-за большого времени работы и объёма памяти не могут быть применимы к задачам с более чем 20 вершинами.
Метод Роберта и Флореса (перебор-метод для орграфов)
Метод работает с путём, непрерывно продлеваемым до тех пор, пока либо получим Гамильтонов контур, либо ясно, что мы его не получим.
Строят M = {mij} k×n, где n – число вершин, k – наибольшая полустепень исхода вершины. Элемент mij представляет собой вершину (например (x, q)), для которой в графе G существует дуга (xj, xq). Вершины (x, q) во множестве Г(xj) можно упорядочить произвольно, образовав элементы j-ого столбца матрицы М.
Некоторая вершина (например, x1) выбирается в качестве отправной и образуется первый элемент множества S, в котором хранятся уже найденные вершины строящегося пути. К множеству S добавляется первая вершина (например, x2) из столбца x1, затем к множеству S добавляется первая возможная вершина (пусть x3) из столбца x2 и т.д.
Под “возможной” вершиной мы понимаем вершину, ещё не принадлежащую множеству S.
Существует две причины, препятствующие включению некоторой вершины на шаге r в S:
B столбце xr нет возможной вершины;
Путь, определяемый последовательностью вершин из множества S, имеет длину (n-1), т.е. является Гамильтоновым.
В этом случае:
В графе G существует дуга (xr, x1) и поэтому Гамильтонов контур может быть найден;
Дуга (xr, x1) не существует и не может быть получен Гамильтонов контур.
В случае 1 и 2б) следует прибегнуть к операции возвращения, 2а) – можно распечатать результат. Возвращение состоит в удалении последней включённой вершины xr из множества S.
и добавлений к
множеству S
первой возможной вершины следующей за
хr
в столбце хr-1
матрицы М.
Если не существует
никакой возможной вершины в столбце
,
делается следующий шаг возвращения и
т.д.
Поиск заканчивается в том случае, когда множество S состоит только из вершины x1 и не существует никакой возможной вершины в столбце х1, которую можно добавить к множеству S, потому что следующий шаг возвращения делает множество S пустым. Таким образом, можно найти все Гамильтоновы контуры.