Как уже отмечалось выше, любой неориентированный граф 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 можно перевести в орграф путем замены каждого ребра двумя противоположно направленными дугами. В этой связи многие результаты для неорграфов могут быть интерпретированы на орграфы.