Домой
назад Оглавление вперед




[стр.-39]

Пример. Пусть множество треугольников. Определим на S бинарное ~ отношение. Будем считать, что для треугольников Да, Ab е 5выполняется отношение Да ~ Ab, если их площади равны. Данное отношение является отношением эквивалентности.

6.5. Связные компоненты

Пусть псевдограф Г= (X, U, Ф) является неориентированным. Две вершины хь х2 е X называются связанными, если существует маршрут изХу вх2. Определим на множестве вершин ЛГбинарное ~ отношение. Для xlt х2& X отношение ~ будет выполняться, т.е. Ху ~ х2, если эти вершины связанные. Введенное отношение является отношением эквивалентности. Действительно, если вершина Ху связана с х2, а вершина х2 связана с х3, то очевидно, что вершинах! связана с х3. Следовательно, существует такое разложение множества вершин

X=[JXt

на попарно непересекающиеся подмножества, что все вершины в каждом Д связаны, а вершины из различных Дне связаны. Тогда можно записать разложение

r=\jruc„uit0)

графа Г= (X, U, Ф) на непересекающиеся связные подграфы Г= (Xit Uj, Ф). Вследствие попарного непересечения подграфов, разложение называется прямым, а сами подграфы называются компонентами связности графа Г. Таким образом, справедливо следующее утверждение.

• Утверждение 6.5.1. Каждый неориентированный граф распадается единственным образом в прямую сумму своих компонент связности.

Количество компонент связности находится в определенном отношении с основными параметрами графа — числом его вершин и ребер.

- Утверждение 65.2. ПустьГ= (X, U, Ф) является простым графом с п вершинами и £ компонентами связности. Число ребер в таком графе не может превосходить величины Cf k+l =

= (n-k + l)(n-k)/2.

Доказательство. Рассмотрим прямое разложение

к

Г= ]Г(Хри1гФ) исходного графа на компоненты связности.


Если положить, что число вершин в компоненте связности рав-

к ,

но л„ то число ребер в таком графе не превосходитДанная

величина достигается в том случае, когда каждая из компонент связности является полным подграфом. Допустим, что среди компонент связности Г(Хп Ur Ф) найдутся хотя бы две, которые имеют более одной вершины, например щгщ > 1. Перенесем одну вершину из /\ в Г2. Легко видеть, что это увеличивает число ребер в модифицируемом полном графе, с к компонентами связности. Отсюда следует, что максимальное число ребер должен иметь граф, состоящий из к — 1 изолированной вершины и одного полного подграфа с п — к + 1 вершинами.

• Следствие. Граф с п вершинами и числом ребер, большим чем связен.

6.6. Выделение компонент связности

Рассмотрим алгоритм нахождения числа компонент связности, а также выделения этих компонент на неориентированном графе. Подобным образом решается задача и для ориентированного графа. В основу рассматриваемого алгоритма 6.3 выделения компонент связности положена описанная ранее техника поиска в глубину на графе Г(Х, U, Ф). Структура алгоритма 6.3 является модификацией в сторону упрощения основного алгоритма 6.1 поиска в глубину. Работа алгоритма 6.3 направлена на формирование вектораметок вершин х е X графа. Элементу Магк[х] присваивается общий номер той компоненты, которой принадлежит вершинах е X. Сложность алгоритма 6.3, как и алгоритма 6.1, составляет + \U\).

Алгоритм 6.3. Выделение связных компонент неориентированного графа

for v е Xdo Mark[v]= 0; {Начальнаяустановка} count = 0; {Счетчик числа компонент) for v & Xdo ifMark[vb 0 then begin count = count + 1; Component, count); end;


Procedure Component(x, count): Mark[x] = count;

for v е Adj[x] do if Mark{vY 0 then Component, count);

end;

Программная реализация выделения компонент связности представлена в алгоритме 6.4, который близко соотносится с соответствующим множественным описанием алгоритма 6.3. Рассмотрим пример расчета по программе алгоритма 6.4 выделения компонент связности графа, представленного на рис. 6.14.

Рис. 6.14. Пример выделения компонент связности графа

Для программы алгоритма 6.4 исходные данные структуры смежностиграфа на рис. задаются в текстовом файле

Connect.in. Структура (правило) заполнения файла одинакова с той, которая описана в рассмотренном примере поиска в глубину при расчете по программе алгоритма 6.2.

Данные файла Connect.in для примера на рис. 6.14:

11

1

3

2 3 4

2

2

3 1

9

1

7

8

1

7

12

3

14 15 21

14

2

12 15

3

3

2 1 4

4

2

13

7

2

9 8

15

2

14 12

21

1

12

Результаты расчетов сохраняются в выходном файле Соп-

nect.out со следующей структурой:

1 2 9 8 12 14 з 4 7 15 21 — номера вершин графа;

номера компонент связности.



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5] [стр.6] [стр.7] [стр.8] [стр.9] [стр.10] [стр.11] [стр.12] [стр.13] [стр.14] [стр.15] [стр.16] [стр.17] [стр.18] [стр.19] [стр.20] [стр.21] [стр.22] [стр.23] [стр.24] [стр.25] [стр.26] [стр.27] [стр.28] [стр.29] [стр.30] [стр.31] [стр.32] [стр.33] [стр.34] [стр.35] [стр.36] [стр.37] [стр.38] [стр.39] [стр.40] [стр.41] [стр.42] [стр.43] [стр.44] [стр.45] [стр.46] [стр.47] [стр.48] [стр.49] [стр.50] [стр.51] [стр.52] [стр.53] [стр.54] [стр.55] [стр.56] [стр.57] [стр.58] [стр.59] [стр.60] [стр.61] [стр.62] [стр.63] [стр.64] [стр.65] [стр.66] [стр.67] [стр.68] [стр.69] [стр.70] [стр.71] [стр.72] [стр.73] [стр.74] [стр.75] [стр.76] [стр.77] [стр.78] [стр.79] [стр.80] [стр.81] [стр.82] [стр.83] [стр.84] [стр.85] [стр.86] [стр.87] [стр.88] [стр.89] [стр.90] [стр.91]