Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Дополнительно темы по графам.doc
Скачиваний:
6
Добавлен:
24.08.2019
Размер:
443.9 Кб
Скачать

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

1. Присваиваем p=1 (p − количество компонент связности), .

2. Включаем в множество вершин Vp компоненты сильной связности Gp вершины, соответствующие единицам первой строки матрицы Sp. В качестве матрицы AGp возьмем подматрицу матрицы AG, состоящую из элементов матрицы A, находящихся на пересечении строк и столбцов, соответствующих вершинам из Vp.

3. Вычеркиваем из Sp строки и столбцы, соответствующие вершинам из Vp. Если не остается ни одной строки (и столбца), то p- количество компонент сильной связности. В противном случае обозначим оставшуюся после вычеркивания срок и столбцов матрицу как Sp+1, присваиваем p=p+1 и переходим к п. 2.

Пример

Выделим компоненты связности ориентированного графа, изображенного на рис. 1. В данной задаче количество вершин n=5.

Рис. 1.

Значит, для данного ориентированного графа матрица смежности будет иметь размерность 5×5 и будет выглядеть следующим образом

.

Найдем матрицу достижимости для данного ориентированного графа по формуле 1) из утверждения:

, ,

,

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

.

Таким образом, матрица сильной связности, будет следующей:

.

Присваиваем p=1 и составляем множество вершин первой компоненты сильной связности G1: это те вершины, которым соответствуют единицы в первой строке матрицы SG. Таким образом, первая компонента сильной связности состоит из одной вершины .

Вычеркиваем из матрицы S1 строку и столбец, соответствующие вершине v1, чтобы получить матрицу S2:

.

Присваиваем p=2. Множество вершин второй компоненты связности составят те вершины, которым соответствуют единицы в первой строке матрицы S2, то есть . Составляем матрицу смежности для компоненты сильной связности G исходного графа G − в ее качестве возьмем подматрицу матрицы AG, состоящую из элементов матрицы A, находящихся на пересечении строк и столбцов, соответствующих вершинам из V2:

.

Вычеркиваем из матрицы S2 строки и столбцы, соответствующие вершинам из V2 ,чтобы получить матрицу S3, которая состоит из одного элемента:

и присваиваем p=3. Таким образом, третья компонента сильной связности исходного графа, как и первая, состоит из одной вершины .

Таким образом, выделены 3 компоненты сильной связности ориентированного графа D:

G1:

G2:

G3:

Алгоритм фронта волны.

Определение: - образ вершины - множество вершин, в которые исходят дуги из данной вершины.

Пусть необходимо найти минимальный путь из вершины в вершину .

  1. Выписываются все вершины с 1 по n. Вершина помечается индексом 0.

  2. Находится первый фронт волны как множество вершин образа вершины .

(3.17)

  1. Все вершины, принадлежащие первому фронту волны, помечаются индексом 1.

  2. Вводится счетчик шагов (фронтов волны) .

  3. Если или , то вершина недостижима из вершины, и работа алгоритма на этом заканчивается. В противном смысле переходим к пункту 6.

  4. Если , то переходим к пункту 8. В противном случае существует путь из вершины в вершину длиной в единиц, и этот путь минимальный:

  1. Находятся промежуточные вершины z по правилу:

, (3.18)

где - прообраз вершины - множество вершин, из которых заходят дуги в вершину

  1. Определяется фронт волны как все непомеченные вершины, принадлежащие образу вершин - го фронта волны. Помечаются индексом вершины фронта волны. Далее осуществляется переход к пункту 5.

ПРИМЕР

Пусть задан граф матрицей смежности:

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

Необходимо найти минимальный путь из вершины в вершину (по алгоритму «фронта волны»).

  1. Выпишем все вершины. Вершина помечается индексом «0»

0

  1. Находится первый фронт волны:

  1. Все вершины, принадлежащие первому фронту волны, помечаются индексом «1».

0 1 1

  1. Так как , и , то определяем второй фронт волны:

  1. Все вершины, принадлежащие второму фронту волны, помечаются индексом «2».

0 2 2 1 1

  1. Так как , и , то определяем третий фронт волны:

  1. Так как , то существует путь из вершины в вершину длиной 3 единицы:

  1. Находятся промежуточные вершины :

Выберем

Выберем

Таким образом, минимальный путь из вершины в вершину имеет вид: