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