- •22 Лекция № 21. Связность графов и фундаментальные циклы и разрезы графа
- •Алгоритм определения компонент сильной связности орграфа
- •22.2.3 Определение компонент связности
- •22.2.4 Вопросы для контроля к п. 22.2.1
- •22.3 Остов графа
- •22.3.1 Нахождение остова минимальной длины
- •22.3.2 Фундаментальные циклы
- •22.3.3 Фундаментальные разрезы
- •20.3.4 Вопросы для контроля к п. 22.3
Алгоритм определения компонент сильной связности орграфа
Удалить из графа вершины источники, тупиковые и изолированные вершины, зафиксировав их как отдельные сильные компоненты.
Выбрать некоторую вершину xi.
Определить для xi
.Выполнить операцию пересечения
и зафиксировать множество вершин,
вошедших в
.Удалить из графа вершины, принадлежащие
и инцидентные им дуги. Если получен
подграфG’, то перейти
к п. 2. Если граф пуст, то перейти к п. 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}.
