- •Виды графов
- •Изоморфизм
- •Матричное задание графа
- •Свойства матрицы смежности
- •Операции над графами
- •Достижимость и связность
- •Матрицы достижимости и контрдостижимости
- •Нахождение сильных компонент
- •Базы и антибазы
- •Построение компонент связности в неориентированном графе
- •Конденсация графа
- •Построение компонент связности в ориентированном графе
- •Система независимых циклов
- •Дерево. Остов граф
- •Процесс восстановления дерева по набору
- •Алгоритм построения произвольного остова
- •Определение минимального остова
- •Алгоритм построения системы независимых циклов графа
- •Определение кратчайшего пути на графе методом Дейкстры
- •Модификация Форда
- •Алгоритмы поиска всех кратчайших путей
- •Алгоритм Флойда
- •Алгоритм Флойда
- •Алгоритм Данцига
- •Алгоритм Данцига
- •Раскраска
- •Метод построения функции Гранди на графе
- •Свойства хроматического числа
- •Гамильтоновы пути, контуры и задача Коммивояжера
- •Метод Роберта и Флореса (перебор-метод для орграфов)
- •Применение метода ветвей и границ к решению задачи Коммивояжера.
- •Потоковые алгоритмы
- •Алгоритм поиска увеличивающего пути
- •Алгоритм поиска максимального потока
- •Алгоритм Форда и Фалкерсона
- •Модификация алгоритма поиска максимального потока при нескольких источниках и стоках
- •Алгоритм поиска потока минимальной стоимости
- •Алгоритм поиска потока минимальной стоимости
- •Алгоритмы построения покрывающих деревьев
- •Алгоритм построения покрывающего дерева славик?!! последняя :-(
Конденсация графа
x1*
x2*
x6*
x3*
x5*
x6*
граф G*=G*(X*,Г*)
Рис. 32
Процедуру, связанную с построением сильных компонент можно сделать более удобной с использованием матриц R и Q.
-поэлементное
умножение матриц
Тогда видно, что строка xi , матрицы содержит единицы только в тех столбцах xj, для которых выполняется условие: вершины xi и xj взаимодостижимы. В других местах строки xi стоят нули.
Базы и антибазы
База В графа есть множество вершин, из которых достижима любая вершина графа, и которые являются минимальными в том смысле, что не найдется собственного подмножества В, обладающего таким свойством достижимости.
Если обозначить
множество вершин, достижимых из вершин
множества В, то есть
,
то В является базой тогда и только
тогда, когда
и
.
Базой является такое множество вершин графа, которое удовлетворяет условиям:
Каждая вершина графа G достижима хотя бы из одной вершины множества B.
Во множестве В нет вершины, которая достижима из других вершин множества В.
В любом графе без циклов существует единственная база. Она состоит из таких вершин графа, полустепени захода которых равны 0.
В данном примере, глядя на конденсацию, определим вершины графа, полустепени захода которых равны 0.
базы графа G можно
строить так: из каждой вершины базы B*
конденсации графа G*
необходимо взять по одной вершине.
,
где m- число вершин
множества в базе B*
конденсации графа G*.
Если
,
то базой В является произвольное
множество
,
где
В нашем примере:
Антибаза
есть множество всех вершин графа G,
таких что
,
а для любых
.
Антибаза есть такое минимально возможное множество вершин, что какова бы ни была вершина графа G , из нее достижима некоторая вершина в антибазе.
Таким образом, антибаза конденсации
есть множество вершин в графе G*,
полустепени исхода которых равны 0.
Антибазы исходного графа G
строятся из антибазы конденсации графа
G* путем
выбора по одной вершине каждой вершине
множества антибазы
.
В нашем примере:
Построение компонент связности в неориентированном графе
Алгоритм состоит из следующей последовательности шагов:
Bсе вершины графа не помечены (
)Выбираем очередную неотмеченную вершину графа, отмечаем её и все связанные с ней вершины. Значение индекса i с помощью распространения волны отмеряем по рёбрам, идущим по уже отмеченным индексам и вершинам.
Таким образом, выделяется компонента связности. Если ещё есть неотмеченные вершины, то повторяем пункт 2, иначе выделение компонент связности закончен.
Пример: дан граф, выделить компоненты связности
Рис.33
Согласно алгоритму:
i = 0
i = 1 - отмечаем вершины x1, x3, x6, x8
i = 2 - отмечаем вершины x2, x5, x9
i = 3 - отмечаем вершины x4, x7
i = 4 - отмечаем вершину x10
