Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3 - Графы / Лекция 21 Связность и фундаментальные циклы и разрезы.doc
Скачиваний:
142
Добавлен:
09.04.2015
Размер:
353.28 Кб
Скачать

Алгоритм определения компонент сильной связности орграфа

  1. Удалить из графа вершины источники, тупиковые и изолированные вершины, зафиксировав их как отдельные сильные компоненты.

  2. Выбрать некоторую вершину xi.

  3. Определить для xi.

  4. Выполнить операцию пересечения и зафиксировать множество вершин, вошедших в.

  5. Удалить из графа вершины, принадлежащие и инцидентные им дуги. Если получен подграфG’, то перейти к п. 2. Если граф пуст, то перейти к п. 6.

  6. Сформировать множество классов C.

Для определения получим степенистроки xiматрицы смежности A, а для определениястепенистолбца xi. Максимальный показатель степениn–1, так как учитываются только кратчайшие маршруты. Затем объединим полученные строки (степенистроки xi) со строкой, имеющей единственную 1 в позиции вершиныxi, а полученные столбцы (степенистолбца xi) объединим со столбцом, имеющим единственную 1 в позиции вершиныxi.

определяется как множество вершин, имеющих 1 в полученной матрице строке.определяется как множество вершин, имеющих 1 в полученной матрице столбце.

Пример.Дан граф рис. 22.1.

Найти компоненты сильной связности графа.

Анализируя граф, находим, что вершина 5 тупиковая. Удалив ее, обнаруживаем, что появилась новая тупиковая вершина 4.

После удаления вершины 4 получаем граф на трех вершинах, для которого матрица смежности равна

Рисунок 22.1

A=.

Выберем вершину 1.

Для этой вершины = – первая строка матрицы смежности.

Для получения возводим строку вершины 1 матрицыAво вторую степень, т.е. умножаем строку вершины 1 на матрицуA

=*= .

Поскольку после удаления вершин 4 и 5 в графе осталось только три вершины, то вторая степень – это предел.

Объединим ,со строкой , представляющей вершину 1.

Получаем

= {1} = = .

В другом представлении = {1, 2, 3}.

Теперь определим .

=.=*=. {1} =.

= {1}==.

В другом представлении = {1, 2, 3}.

Таким образом

= {1, 2, 3} и= {1, 2, 3}.

Следовательно,

= {1, 2, 3}{1, 2, 3} = {1, 2, 3}.

Так как ранее были исключены тупиковые вершины 5 и 4, каждая из которых образует свой класс сильной связности, то все классы сильной связности будут такими {1, 2, 3}, {4}, {5}.

22.2.3 Определение компонент связности

Если для любой вершины xi выполняется условие

,

то граф сильно связен.

Поскольку связный неорграф всегда сильно связен, то полученный алгоритм определения компонент сильной связности пригоден и для определения компонент связности неорграфов: Каждая компонента неорграфа сильно связана, а между компонентами связи нет.

Связность орграфа проверяется удалением ориентации дуг и установлением связности полученного неорграфа.

Пример. Дан граф рис. 22.2, для которого имеем

A= .

Рисунок 22.2

В графе изолированных вершин нет, поэтому исключать ничего не надо.

Выберем вершину 1.

В графе 6 вершин, поэтому для определения инужно возводить первую строку и первый столбец матрицы смежности в степени с первой по пятую.

Возводим в степень первую строку матрицы A(сложение и умножение элементов булевские)

Первая строка матрицы смежности

=.

Вторая степень первой строки матрицы смежности

=* =.

Третья степень первой строки матрицы смежности

=* =.

При возведении в третью степень получено повторение строки, возводимой в степень, поэтому операцию возведения в степень прекращаем.

Если продолжить возведение в степень, то результат будет повторяться.

Найдем .

= {1}=

= =.

В других обозначениях

= {1, 3, 5}.

Определим .

= .= * = .

= * = .

Результат совпадает с начальным значением, следовательно, возведение в степень надо прекратить.

Найдем

= {1}== .

В других обозначениях

= {1, 3, 5}.

= {1, 3, 5}{1, 3, 5} = {1, 3, 5}.

Вершины 1, 3, 5 принадлежат отдельной компоненте связности, поэтому на дальнейший процесс поиска других компонент связности влиять не будут. для уменьшения объема вычислений эти вершины, вместе с инцидентными им ребрами, можно исключить. Рассматриваемый пример достаточно простой, поэтому исключать ничего не будем.

Возьмем вершину, не принадлежащую , например, 4.

Действуя аналогично, находим

=.

=* =.

=* =.

Получено повторение строки, возводимой в степень, поэтому операцию возведения прекращаем.

Найдем .

= {4}=

==.

В других обозначениях

= {2, 4, 6}.

Определим .

= .= * = .

= * = .

Результат совпадает с начальным значением, следовательно, возведение в степень надо прекратить.

Найдем

= {4}== .

В других обозначениях

= {2, 4, 6}.

= {2, 4, 6}{2, 4, 6} = {2, 4, 6}.

Таким образом, все вершины графа вошли в два класса – в две компоненты связности C1= {1, 3, 5} иC4= {2, 4, 6}.