Решение стандартных графовых задач с использованием орграфов

Как уже отмечалось выше, любой неориентированный граф G можно преобразовать в ориентированный граф D путем замены каждого ребра двумя противоположно направленными дугами. Отсюда следует, что многие рассмотренные нами ранее алгоритмы решения задач для неориентированных графов применимы и для орграфов. К числу таких алгоритмов относятся задачи нахождения гамильтонова цикла, задача коммивояжера и другие. Мы не будем в данном случае останавливаться на рассмотрение вышеперечисленных задач, поскольку они идентичны алгоритмам, описанным ранее для неориентированных графов.

Маршрутом графа D считается чередующаяся последовательность вершин и дуг (x 0, u 1, x 1, un, хn), в которой каждая дуга ui есть кортеж ui = < xi -1, xi >. Маршрут, в котором все вершины различны, называется путем. Замкнутый маршрут, у которого все вершины различны, за исключением первой и последней, называется контуром. Если существует путь из xi в xj, то говорят, что xj достижима из xi.

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

Неорграф G называется ориентируемым, если каждое его ребро можно ориентировать так, что полученный граф D будет сильно связным. Такой процесс обычно называют заданием ориентации графа G. Очевидно, что произвольный эйлеров граф может быть ориентируем, так как достаточно пройти по любой эйлеровой цепи, ориентируя ребра графа в направлении движения.

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

Необходимым условием существования эйлерова орграфа является его сильная связность.

Связный граф D = (X, U) является эйлеровым, когда " xi Î X (r +(xj) = r (xj)).

Орграф называется гамильтоновым, если в нем существует контур, содержащий каждую вершину орграфа.

Теорема 17.8. Пусть D — сильно связный граф. Если " xi Î X (r +(xj) ³ n / 2 и r (xj) ³ n / 2) Þ D, то D – гамильтонов граф.

Рассмотрим алгоритм построения дерева на ориентированном графе D = (X, U).

1. Выбираем произвольную вершину xi и по матрице смежности определяем все смежные ей вершины (т. е. определяем вершины, соответствующие стрелкам, исходящим из xi). В результате образуется подмножество вершин X’ = { xi, xj,..., xu }, смежных с хi. В случае, если X’ = X, то переходим к пункту 4, в противном случае переходим к пункту 2.

2. Выбираем произвольную вершину xj Î X’, такую, что xj ¹ xi. Снова определяем все смежные с xj вершины, за исключением вершин, уже вошедших в X’.

3. Проверка условия çX’ï = çXï, если условие выполняется - то переход к пункту 4, в противном случае - переход к пункту 2.

4. Конец работы алгоритма, построено дерево Т.

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

Пусть задан ориентированный граф D = (X, U), где X, U - соответственно множество вершин и множество ребер графа. Граф D называется сильносвязным, если любые две его вершины взаимно достижимы. Подграфом D’ графа D называется граф, все вершины которого и инцидентные им ребра принадлежат D, т.е. D’ = (X’, U’), X’ Í X и U’ Í U, и ребра D’ инцидентны только вершинам из X’.

Граф G, полученный из графа D заменой каждой дуги ui = < xk, xl > на соответствующее ребро ui = (xk, xl), т.е. устранением стрелок, называется основанием D.

Тогда максимально сильносвязный подграф графа D будем называть сильной компонентой графа D. Отметим, что в ориентированном графе существует одна и только одна сильная компонента, содержащая данную вершину xi.

Множество вершин R(xi) графа D, достижимых из некоторой вершины xi, состоит из таких элементов xj, для которых (i, j) элемент в матрице достижимости R = || rij || равен 1. Матрица контрдостижимости определяется как Q = Rt, где Rt - матрица, транспонированная к матрице достижимости R.

Если вершина xi одновременно является начальной и конечной вершиной пути, то множество вершин некоторого цикла, содержащего xi, совпадает с пересечением [R(xi) Ç Q(xi)] и все они взаимно достижимы.

В случае удаления этих вершин из исходного графа, в оставшемся порожденном графе D’ = < x - R(xi) Ç Q(xi)> таким же способом выделяется новая сильная компонента, содержащая xj Î < x - R(xi) Ç Q(xi)>. Этот процесс продолжается до тех пор, пока весь исходный граф не будет разбит на сильные компоненты.

Граф D* = (X*, U*) называется конденсацией графа D и определяется следующим образом: каждая его вершина представляет множество вершин некоторой сильной компоненты графа D, дуга < xi *, xj *> существует в D* тогда и только тогда, когда в графе D существует дуга < xi, xj >, такая, что xi принадлежит компоненте, соответствующей вершине xi *, а xj - компоненте, соответствующей вершине xj *. Очевидно, что конденсация графа D не содержит циклов, поскольку наличие цикла означает, что любые вершины этого цикла взаимно достижимы.

Определим прямое и обратное транзитивные замыкания. Прямым транзитивным замыканием Г+(xi) называют подмножество вершин Х' Í Х, в которые можно попасть из вершины xi по некоторому пути. Обратным транзитивным замыканием называют подмножество вершин, из которых можно попасть в xi по некоторому пути, и обозначают Г(xi).

Прямое и обратное транзитивное замыкания можно найти из соотношений:

Г+(xi) = { хi } È Г+(xi) È Г+2(xi) È Г+3(xi) È...,

Г(xi) = { xi } È Г-1(xi) È Г-2(xi) È Г-3(xi) È...,

Г+2(xi) = Г+{Г(xi)};

Г+3(xi) = Г++2(xi)} = Г+++(xi)}}.

Аналогично определяем для Г–2(xi), Г–3(xi) и т.д.

Опишем алгоритм Мальгранжа разбиения графа D на максимально связные подграфы.

Идея алгоритма заключается в следующем. Выбирается произвольная вершина xi Í Х в графе D, для которой определяются прямое и обратное транзитивные замыкания Г+(xi), Г(xi). Их пересечение C(xi) = Г+ хi Ç Г хi является сильной компонентой графа D, т.е. максимально связным подграфом. Далее выбирается следующая вершина xj Ï C(xi) и процесс продолжается.

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: