
- •3. Алгоритмы на графах
- •3.1. Общие положения
- •3.2. Алгоритмы нахождения оптимального пути
- •3.3. Алгоритм нахождения компонент связанности
- •3.2.1. Алгоритм построения компонент связности в неориентированном графе
- •3.4. Дерево. Остов.
- •3.4.1. Алгоритм построения произвольного остова
- •3.4.2. Алгоритм построения минимального остова
- •3.6. Алгоритм кратчайшей раскраски графа
- •3.3. Алгоритмы нахождения подграфов
- •3.3.2. Алгоритм построения системы независимых циклов графа
3.3. Алгоритм нахождения компонент связанности
Вершины Хi и Xj слабо связны, если существует путь (Хi и Xj) в графе (G,X).
Вершины Xi и Xj сильно связаны, если существуют пути (Хi и Xj) и (Xj и Хi) в графе (G, X).
Если в графе нет путей Хi и Xj и нет обратного пути из Хj в Xi, то вершины Хi и Xj не связаны.
Для неориентированною графа имеет смысл только понятие сильной связности. Отношение связности рефлексивно, симметрично, транзитивно - является отношением эквивалентности и однозначно разбивает множество вершим графа на компоненты связности: максимальные подмножества сильно связанных между собой вершин.
Пример 3.2.1
Компоненты связности: 1) {x1, x2, x3, x4}; 2) {x5, x6, x7}; 3) {x8}.
Между компонентами - только слабая связность: есть пути из вершин компоненты 1) в вершины компоненты 2) и 3) и из вершин компоненты 2) в 3).
3.2.1. Алгоритм построения компонент связности в неориентированном графе
1. i=0. Все вершины графа не отмечены.
2. i=i+1. Выбираем очередную неотмеченною вершину, отмечаем ее и все связанные с нею вершины значением индекса i с помощью распространения волны отметок по ребрам, идущим от уже отмеченных индексом i вершин. Таким образом, выделяется i компонента связности. Если есть еще неотмеченные вершины, то выполняется п. 2, иначе выделение компонент связности закончено.
П
ример
3.2.2
1.i = 0
2. i = 1. Отмечаем индексом i =1 вершину Х1, и связанные с ней вершины
Х3, Х7, Х9. Получена первая компонента связности: 1{ Х1, Х3, Х7, Х9}.
3. i =2. Отметим индексом i = 2 вершину Х4 и вершины Х6, Х10. Построена
вторая компонента связности: 2{ Х2, Х6, Х10)
4. i=3 Отмечаются индексом i = 3 вершины X4 и Х8. Построена третья
компонента связности: 3{X4, X8}.
5. i=4. Отметим индексом i = 4 вершину Х5, которая формирует четвертую компоненту связности -{X5}.
3.4. Дерево. Остов.
Д
еревом
называется конечный связный граф
без циклов. Из свойств связности и
отсутствия циклов следует, что у дерева
количество компонент связности р =1
и цикломатическое число
= 0 = m – n
+ 1, отсюда следует что m
= n -1 ; т.е. число ребер в
дереве на единицу меньше числа вершин.
Ниже приведены примеры деревьев.
4
Рис.3
Остов – это подграф (частичный), который может быть построен из графа удалением некоторых ребер и который является деревом.
В
общем случае для графа можно построить
несколько остовов. Для приведенного
ниже графа построен один из возможных
вариантов остова.
Д
ля
несвязного графа рассматриваются
отдельные его компоненты. Остов такого
графа – совокупность его компонент.
3.4.1. Алгоритм построения произвольного остова
1. Для каждой компоненты i графа выполняем пп.2 и 3.
2.Строим частичный подграф, содержащий все ni вершины компоненты и не содержащий ребер (0 граф).
3. Если в текущий частичный граф включены уже ni-1 ребер, то остов для компоненты i построен, иначе выбираем очередное нерассмотренное ребро компоненты и пытаемся включить его в текущий граф. Если в текущем графе это не приводит к образованию цикла, то включаем ребра, иначе - не включаем. Ребро считаем рассмотренным.
Выполняем п. 3.
Так как цикл не образовался, то все ребра с номерами 1, 2, 3, 4 включены в остов. Проверяем: m=n-1(4-5-1).