
- •Изоморфизм
- •Матричное задание графа
- •Свойства матрицы смежности
- •Операции над графами
- •Достижимость и связность
- •Матрицы достижимости и контрдостижимости
- •Нахождение сильных компонент
- •Конденсация графа
- •Базы и антибазы
- •Построение компонент связности в неориентированном графе
- •Построение компонент связности в ориентированном графе
- •Система независимых циклов
- •Дерево. Остов граф
- •Процесс восстановления дерева по набору
- •Алгоритм построения произвольного остова
- •Определение минимального остова
- •Алгоритм построения системы независимых циклов графа
- •Модификация Форда
- •Алгоритмы поиска всех кратчайших путей
- •Алгоритм Флойда
- •Алгоритм Флойда
- •Алгоритм Данцига
- •Алгоритм Данцига
- •Раскраска
- •Метод построения функции Гранди на графе
- •Гамильтоновы пути, контуры и задача Коммивояжера
- •Метод Роберта и Флореса (перебор-метод для орграфов)
- •Алгоритм поиска увеличивающего пути
- •Алгоритм поиска максимального потока
- •Алгоритм Форда и Фалкерсона
- •Модификация алгоритма поиска максимального потока при нескольких источниках и стоках
- •Алгоритм поиска потока минимальной стоимости
- •Алгоритм поиска потока минимальной стоимости
- •Алгоритмы построения покрывающих деревьев
Модификация Форда
Алгоритм Дейкстры можно модифицировать для случая, когда некоторые из дуг имеют отрицательные длины. Модификация состоит в следующем:
На шаге 2 алгоритма Дейкстры пересчёт величин с помощью соотношения (1) производится для всех вершин, а не только для неокрашенных. Следовательно, числа могут уменьшаться как для неокрашенных, так и для окрашенных вершин.
Если для некоторой окрашенной вершины x происходит увеличение длины , то с этой вершины и инцидентной ей окрашенной дуги окраска снимается.
Процедура алгоритма заканчивается только тогда, когда все вершины окрашены и когда после выполнения шага 2 ни одно из чисел не меняется.
Алгоритм Форда не решает задачи нахождения кратчайшего пути при наличии в исходном графе контура, имеющего отрицательную длину. Действительно, в этом случае, повторяя неограниченное число раз этот алгоритм для контура, можно получить путь со сколь-угодно малой длиной.
В случае отсутствия сведений о наличии в графе контуров можно применить алгоритм Форда, но в процессе его работы необходимо учитывать сколько раз окрашиваются отдельные вершины. Как только число окрашиваемой какой-либо вершины достигнет величины n (число вершин графа) процедуру алгоритма можно остановить, т.к. исходный граф содержит контур отрицательной длины.
Алгоритмы поиска всех кратчайших путей
Эта задача могла бы быть решена путём многократного применения алгоритма Дейкстры с последовательным выбором каждой вершины графа в качестве вершины S. Однако, существуют алгоритмы более эффективные, чем процедура многократного повторения алгоритма Дейкстры.
Алгоритм Флойда
Введём некоторые
обозначения, перенумеруем вершины
исходного графа целыми числами от 1 до
n.
Обозначим через
длину кратчайшего пути из вершины i
в вершину j,
который в качестве промежуточных может
содержать только первые m
– вершин графа. Если между вершинами
i
и j
не существует ни одного пути, то будем
считать, что
.
представляет собой кратчайший путь из
вершины i
в j,
не имеющего промежуточных вершин. Для
любой вершины i
.
Обозначим
через
матрицу размером
,
(i,
j)-ый
элемент которой совпадает с
.
Если в исходном
графе известна длина каждой дуги, то
мы можем сформировать матрицу
.
Задача состоит в
определении матрицы
,
представляющей кратчайшие пути между
всеми вершинами рассматриваемого
графа.
Рассмотрим основную идею, лежащую в основе алгоритма Флойда.
Предположим, что нам известно:
кратчайший путь из вершины i в вершину m, в котором в качестве промежуточных допускается использование (m-1) первых вершин;
кратчайший путь из вершины m в вершину j, в котором допускается использование в качестве промежуточных (m-1) первых вершин;
кратчайший путь из вершины i в вершину j, в котором в качестве промежуточных допускается использование только (m-1) первых вершин.
Т.к. исходный граф не может содержать контур отрицательной длины, то один из двух путей ― путь, совпадающий с представленным в пункте в), или путь, являющийся объединением путей из пунктов а) и б), ― должен быть кратчайшим путём из вершины i в вершину j, в котором в качестве промежуточных допускается использование только (m-1) первых вершин.
Таким образом,
(2)
Из этого соотношения
видно, что для вычисления элементов
матрицы
необходимо
располагать лишь элементами матрицы
.