- •Виды графов
- •Изоморфизм
- •Матричное задание графа
- •Свойства матрицы смежности
- •Операции над графами
- •Достижимость и связность
- •Матрицы достижимости и контрдостижимости
- •Нахождение сильных компонент
- •Базы и антибазы
- •Построение компонент связности в неориентированном графе
- •Конденсация графа
- •Построение компонент связности в ориентированном графе
- •Система независимых циклов
- •Дерево. Остов граф
- •Процесс восстановления дерева по набору
- •Алгоритм построения произвольного остова
- •Определение минимального остова
- •Алгоритм построения системы независимых циклов графа
- •Определение кратчайшего пути на графе методом Дейкстры
- •Модификация Форда
- •Алгоритмы поиска всех кратчайших путей
- •Алгоритм Флойда
- •Алгоритм Флойда
- •Алгоритм Данцига
- •Алгоритм Данцига
- •Раскраска
- •Метод построения функции Гранди на графе
- •Свойства хроматического числа
- •Гамильтоновы пути, контуры и задача Коммивояжера
- •Метод Роберта и Флореса (перебор-метод для орграфов)
- •Применение метода ветвей и границ к решению задачи Коммивояжера.
- •Потоковые алгоритмы
- •Алгоритм поиска увеличивающего пути
- •Алгоритм поиска максимального потока
- •Алгоритм Форда и Фалкерсона
- •Модификация алгоритма поиска максимального потока при нескольких источниках и стоках
- •Алгоритм поиска потока минимальной стоимости
- •Алгоритм поиска потока минимальной стоимости
- •Алгоритмы построения покрывающих деревьев
- •Алгоритм построения покрывающего дерева славик?!! последняя :-(
Определение минимального остова
Для взвешенного графа остов с минимальной суммой весов вошедших в него ребер
называется минимальным (кратчайшее связывающее дерево). Аналогию можно провести и в случае обозначения длины ребер.
Алгоритм построения системы независимых циклов графа
Строится произвольный остов графа, а в исходном графе отмечаются ребра, включенные в остов.
Выбираем очередное неотмеченное ребро и строим цикл, включающий это ребро и ребра остова. Он обязательно существует, так как вершины остова связны. Рассмотренное ребро отмечается и, если есть еще неотмеченные ребра, то выполняется шаг 2, иначе - шаг 3.
По формуле Эйлера производится проверка числа построенных циклов (для самопроверки).
Пример:
x2
x2
1 3 1
3
x1
2 x3
x1
2 x3
7 4 5 7
4 5
x5
6 x4
x5
6 x4
Рис.43
1 2 3 4 5 6 7
По формуле Эйлера
Включим
и получим цикл
Включим
и получим цикл
Включим
и получим цикл
Определение кратчайшего пути на графе методом Дейкстры
Каждой дуге исходного графа поставим
число
.
Если некоторая дуга
отсутствует, то положим
.
Будем называть число
длиной
дуги
,
хотя это число можно интерпретировать,
как соответствующие затраты или весовой
коэффициент.
Рассмотрим алгоритм, который определяет путь из s в вершину t и который имеет минимальную длину. В этом алгоритме считается, что все дуги графа имеют положительную длину. Алгоритм включает в себя 3 этапа:
Все вершины и дуги не окрашены. Каждой вершине присваивается число
,
равное кратчайшему пути из вершины s
в вершину х, который включает только
окрашенные вершины. Положим
и
.
В этом случае окрашиваем s,
считая
,
где у – последняя окрашенная
вершина.Для каждой неокрашенной вершины x пересчитать величину по следующей формуле
.
Если все
для неокрашенных вершин х - необходимо
закончить процедуру алгоритма, так как
в исходном графе отсутствуют пути из
вершины s в неокрашенные
вершины, иначе - окрасить ту из вершин
х, для которой величина d(x)
является наименьшей, кроме того, окрасить
дугу, ведущую в выбранную на данном
шаге вершину х. Положить
.Если
,
то мы заканчиваем процедуру. Кратчайший
путь из вершины s
в вершину t найден. В
противном случае вернуться к шагу 2.
Заключение:
Когда окрашивается некоторая вершина, то окрашивается и некоторая дуга, заходящая в эту вершину. Окрашенные дуги не могут образовывать в исходном графе цикла, так как в алгоритме не может окрашиваться дуга, концевые вершины которой уже окрашены.
Если кратчайшему пути из s в вершину t принадлежит вершина у, то часть этого пути, заключенная между х и у, является кратчайшим путем между этими вершинами.
Для того чтобы определить кратчайшие пути из вершины s во все вершины исходного графа, процедуру алгоритма следовало бы продолжать до тех пор, пока все вершины графа не были бы включены в ориентированное дерево кратчайших путей.
Пример: найти кратчайший путь из вершины s в вершину t методом Дейкстры
Строим матрицу расстояний
Рис. 44
3
s
c
a
s
c
4
3
s
d
c
4
a
3
3
c
s
d
c
4
a
b
3
3
7
c
s
t
d
c
4
a
b
2
3
3
7
Получили кратчайший путь (s, c), (c, d), (d, t), длина которого равна 8.
