Элементы теории графов 3.1 Определения графов

advertisement
Глава 3 Элементы теории графов
3.1 Определения графов
Часто бывает полезно и наглядно изобразить некоторую ситуацию в виде
рисунка, состоящего из точек (вершин), представляющих основные элементы
ситуации и линий (ребер), отражающих связи между элементами. Такие
рисунки называются графами.
Между рассмотренным ранее понятием отношения и понятием графа
существует тесная связь. Теория графов представляет собой удобный язык для
описания программных и других моделей. Граф – это удобный способ
изображения различных взаимосвязей (отношений). Граф может изображать
сеть улиц в городе (вершины – перекрестки, улицы – ребра), блок-схемы
программ, электрические цепи, географические карты и т.д.
3.1.1 История теории графов
Теория графов возникла из решения различных прикладных задач. Первые
задачи были связаны с решением математических
развлекательных задач и головоломок. Рассмотрим
эти задачи.
1. Задача о Кенигсбергских мостах. Необходимо
обойти все 4 части суши, пройдя по каждому мосту
один раз, и вернуться в исходную точку. Развитие
этой задачи привело к циклу задач об обходах графов (Решена Леонардом
Эйлером в 1736 г.).
2. Задача о трех домах и трех колодцах. Есть три дома и
три колодца. Жители домов поссорились. Требуется от
каждого дома проложить тропинку к каждому колодцу так,
чтобы эти тропинки не пересекались. (Решена Куратовским в
1930)
3. Задача о четырех красках. Любую карту на плоскости
3
раскрасить четырьмя красками так, чтобы никакие две соседние 2
1
области не были закрашены одинаково. Эта задача была
сформулирована в середине XIX века, и попытки ее решить
4
привели к появлению некоторых исследований графов, имеющих
теоретическое и прикладное значение.
Многие результаты середины XIX века были получены при решении
практических проблем. Например, Кирхгоф: система уравнений токов и
напряжений в электротехнической схеме представлялась графом и решалась с
помощью методов теории графов; химия… Задача о перевозках, решение
которой привело к созданию эффективных методов решения транспортных
задач … В XX веке задачи, связанные с графами, получили распространение не
только в физике, электротехнике, химии, биологии, экономике, но и внутри
40
различных разделов математики (алгебра, теория чисел, теория вероятностей и
другие области).
В проблематике теории графов можно выделить направления
комбинаторного и геометрического характера. К первому относятся задачи о
построении графов с заданными свойствами, о подсчете и перечислении таких
графов. Геометрический характер носят, например, задачи, связанные с
обходами графов. Характерным специфическим направлением теории графов
является цикл проблем, связанных с раскрасками, в которых изучаются
разбиения множества вершин, обладающие определенными свойствами.
3.1.2 Основные понятия
Граф G определяется как упорядоченная пара V, E, где V – непустое
E  V 2 – множество ребер (набор
множество вершин, отношение
неупорядоченных или упорядоченных пар вершин). Вершины и ребра графа
называются его элементами.
Граф, содержащий конечное число элементов, называется конечным.
Число вершин конечного графа называется его порядком и обозначается | V |,
число ребер обозначается как |E |: G(V,E) = V, E, V  , E  VV, E = E–1.
Граф порядка n, имеющий m ребер, называется (n,m)-графом.
Обычно граф изображают диаграммой: вершины – точками или кружками,
ребра – линиями (нарисовать).
Такой способ задания графа является самым простым и наглядным, хотя и
годится только для простейших случаев. Кроме того, затруднительно
обрабатывать такой граф с помощью ЭВМ. Поэтому существуют специальные
способы представления графа в ЭВМ, которые мы рассмотрим чуть позже.
Пусть v1 и v2 – вершины, e – соединяющее их ребро. Тогда ребро e и
каждая из этих вершин называются инцидентными друг другу, вершины v1 и v2
называются смежными. Два ребра, имеющие одну общую вершину
(инцидентные одной вершине), также называются смежными.
Пример 3.1 Вершины v1 и v2 являются смежными,
e2
v
v2
1
вершина v1 инцидентна ребрам e2= (v1,v2) и e1= (v1,v3).
V  v1 , v2 , v3 , v4 , E  (v1 , v2 ), (v1 , v3 ), (v2 , v3 ), (v3 , v4 )  =
e1
e3
{e1, e2, e3, e4}. Ребра e1, e2, e3 являются попарно
v3
e4 v4
смежными, а ребра e2, e4 – несмежными, так же как и
вершины v1, v4 и v2, v4.
Множество вершин, смежных с вершиной v, называется множеством
смежности (окружением) вершины v и обозначается Г+(v) ={uV| (u,v)E},
Г(v)=Г*(v) =Г+(v){v}. Очевидно, что: u  Г(v)  v  Г(u). Если не оговорено
противное, то подразумевается Г+ и обозначается просто Г.
Если А – множество вершин, то Г(А) – множество вершин, смежных с
вершинами из А: Г(А) = {uV| vA uГ(v)} = Г(v) vA.
41
3.1.3 Другие определения графов и бинарные отношения
Часто рассматриваются следующие разновидности графов.
1. В некоторых задачах инцидентные ребру вершины рассматриваются в
определенном порядке. Тогда элементами множества Е={(u,v)|u,vV} являются
упорядоченные пары, т.е. ребру приписывается направление от одной вершины
к другой, и ребра называются дугами (говорят, что дуга выходит из вершины u
и заходит в вершину v). Вершины в таком графе называются узлами, а сам
граф, все ребра которого являются дугами, называется ориентированным
графом, или орграфом (см. рис. а)). Иногда рассматриваются и смешанные
графы, имеющие как дуги, так и неориентированные ребра.
2. Различные ребра графа могут быть инцидентны одной и той же паре
вершин, в этом случае они называются кратными ребрами, а сам граф –
мультиграфом (см. рис. б)).
3. Если элементом множества Е является пара одинаковых элементов V, то
такое ребро соединяет вершину саму с собой. Тогда это ребро называется
петлей, а граф – псевдографом (рис. в)). В псевдографе возможно также
наличие кратных ребер.
4. В отличие от мультиграфа и псевдографа, граф без петель и кратных
ребер называется простым.
5. Если задана функция F : V  M или F : Е  M, то множество М
называется множеством пометок, а сам граф называется размеченным (т.е.
всем его вершинам или всем ребрам присвоены некоторые метки, в качестве
которых обычно используются буквы или целые числа – г)).
v1 а)
v1 б)
v1 в)
v1 г)
a
v2
b
v2
v2
c
v3
v3
v3
Далее, говоря «граф G(V,E)», будем иметь в виду неориентированный
непомеченный граф без петель и кратных ребер.
Фактически, графы и бинарные отношения – это один и тот же класс
объектов, описанный разными средствами. Отношения (в частности, функции)
являются базовыми средствами для построения большинства математических
моделей, используемых при решении практических задач. С другой стороны,
графы допускают наглядное представление в виде диаграмм. Это объясняет
широкое использование графов при кодировании и проектировании программ.
Любой граф с петлями, но без кратных ребер, задает бинарное отношение
E на множестве V, и обратно. Пара элементов принадлежит отношению:
(a,b)EVV  в графе есть G ребро (a,b). Неориентированный граф
соответствует симметричному отношению. Изменение направления всех дуг
соответствует обратному отношению. Мультиграф, все вершины которого
имеют петли, задает рефлексивное отношение.
v3
v2
42
3.1.4 Изоморфизм графов
При изображении графа точки, обозначающие его вершины, берутся
совершенно произвольно, поэтому рисунки одного и того же графа могут быть
совершенно непохожими. Как же понять, одинаковы ли графы, изображенные
разными чертежами? Решение проблемы стандартное – если можно взаимно
однозначно отобразить множество вершин одного графа на множество вершин
другого так, чтобы сохранилось отношение смежности, то это две копии графа.
Дадим формальное определение такого отображения.
Говорят, что два графа G1(V1,E1) и G2(V2,E2) изоморфны: G1~ G2, если
существует биекция (1-1 соответствие) h: V1V2, сохраняющая отношение
инцидентности (при которой смежные вершины (ребра) графа G1 переходят в
смежные вершины (ребра) графа G2): e1 =(u,v) E1  e2 =(h(u),h(v)) E2;
e2 =(u,v) E2  e1 = (h–1(u),h–1(v)) E1;
Графы, отличающиеся только нумерацией вершин, являются
изоморфными.
Изоморфизм
графов
является
отношением
эквивалентности.
Действительно, изоморфизм обладает всеми необходимыми свойствами:
1) рефлексивность – G~G, где требуемая биекция есть тождественная функция;
2) симметричность – если G1~ G2 с биекцией h, то G2 ~ G1 с биекцией h–1;
3) транзитивность – если G1~ G2 с биекцией h, а G2 ~ G3 с биекцией g; то G1~
G3 с биекцией g ◦ h.
Графы рассматриваются с точностью до изоморфизма, т.е.
рассматриваются классы эквивалентности по отношению изоморфизма.
Пример 3.2 Три
w6
u1
u4
w3
v
v2
v3
внешне
различные 1
диаграммы,
u6
u2
w1
w5
приведенные
на
рисунке,
являются
v6
u5
u3
v5
диаграммами одного и v4
w4
w2
того же графа (с
точностью до изоморфизма).
Числовая характеристика, одинаковая для всех изоморфных графов,
называется инвариантом графа. В частности, количество вершин и количество
ребер – инварианты графа G.
 Не известно никакого набора инвариантов, определяющих граф с
точностью до изоморфизма.
u4
u4
u1
Пример 3.3 Количество вершин, ребер u1
и количество смежных вершин для
u6
u6
u2
u2
каждой вершины не определяют граф
(см. рисунок) – графы различны, хотя
u5
u3
u5
u3
все эти параметры у них совпадают.
43
3.1.5 Контрольные вопросы
1.
2.
3.
4.
5.
6.
7.
Что такое граф? Какие вершины (ребра) называются смежными?
Какие элементы графа называются инцидентными?
Что такое порядок графа?
Как связаны графы и бинарные отношения, рассмотренные ранее в нашем
курсе? Какое отношение и почему задает простой граф? Псевдограф?
Чем мультиграф отличается от простого графа?
Чем дуги отличаются от ребер? В каком случае вершины графа называют
узлами?
Изоморфны ли графы на рисунке?
3.2 Элементы графов
После рассмотрения определений, относящихся к графам как к цельным
объектам, дадим определения различным составным элементам графов.
3.2.1 Валентность
Степенью (или валентностью) вершины v называется число инцидентных
ей ребер. Степень вершины обозначается deg(v). Очевидно, что для любой
вершины v V справедливо: 0  deg(v)  |V| –1; deg(v) = |Г(v)|.
Вершина графа, имеющая степень 0, называется изолированной, а вершина
со степенью 1 – висячей, или концевой.
v1
Пример 3.4 В показанном на рисунке графе вершина
v4 является висячей: deg(v4) =1. Степени остальных
v4
вершин: deg(v1) =3; deg(v2) = deg(v3) = 2.
v2
v3
Если степени всех вершин графа одинаковы и равны
некоторому числу k, то такой граф называется регулярным графом степени k.
Степень регулярности является инвариантом графа и обозначается r(G). Для
u4 u1
u4
u1
нерегулярных графов r(G) не определено.
u6
u5
Пример 3.5 На
рисунке
показаны
регулярные графы соответственно степени 2
и 3.
u3
u2
u3 u2
2
Для орграфа число дуг, исходящих из вершины v, называется
полустепенью исхода, а число входящих – полустепенью захода. Эти числа
соответственно обозначаются deg–(v) и deg+(v): deg(v)=deg–(v) + deg+(v).
Теорема Эйлера (Лемма "о рукопожатиях"). Сумма степеней всех
вершин графа является четным числом и равна удвоенному числу его ребер,
т.е.
deg(v)  2 E . Для орграфа:  deg  (v)   deg  (v)  2 E .

vV
vV
vV
44
Действительно, при подсчете данной суммы каждое ребро считается
дважды: при определении степени одного конца и при определении степени
другого конца.
Последовательность степеней всех вершин графа, записанных в какомлибо порядке, называется степенной последовательностью.
Пример 3.6 Найдем степенную последовательность
Выпишем степени всех вершин графа в
v1
соответствии с их номерами (2,2,3,2,1).
v2
для
графа
v3
G.
v4
v5
3.2.2 Маршруты, цепи, циклы
Маршрутом от вершины u к вершине v или (u,v)-маршрутом в графе G
u  v0 , e1 , v1 , e2 ,, en , vn  v , в
называется всякая последовательность вида
которой любые два соседних элемента инцидентны, т.е. ek – ребро,
соединяющее вершины vk–1 и vk, k = 1,2,…,n.
 Это определение подходит также для псевдо-, мульти- и орграфов. В
случае орграфа vk–1 – начало ребра еk , a vk – его конец.
При этом вершину u называют началом маршрута, а вершину v – его
концом. В маршруте некоторые вершины и ребра могут совпадать. Если u = v,
то маршрут замкнут, а иначе открыт.
Для
«обычного»
графа
маршрут
можно
задавать
только
последовательностью вершин v0 , v1 ,, v n или ребер e1 , e2 ,, en .
Маршрут называется цепью, если в нем нет совпадающих ребер, и простой
цепью – если дополнительно нет совпадающих вершин, кроме, может быть,
начала и конца цепи. Про цепь u= v0 , v1 ,, v n =v говорят, что она соединяет
вершины u и v и обозначают u,v.
Очевидно, что если есть цепь, соединяющая вершины u и v, то есть и
простая цепь, соединяющая эти вершины.
Замкнутая цепь называется циклом; замкнутая простая цепь – простым
циклом. Число циклов в графе G обозначается z(G). Граф без циклов
называется ациклическим.
Для орграфов цепь называется путем, а цикл – контуром.
1
2
Пример 3.7 (1,2,3,4,5,3,2) – маршрут, не являющийся цепью;
(1,2,3,4,5,3) – цепь, не являющаяся простой;
3
(1,2,3,4) – простая цепь; (1,2,3,4,5,3,1) – цикл, не являющийся
простым; (1,2,3,1) – простой цикл.
5
Число ребер в маршруте M (возможно, с повторениями) 4
называется его длиной, обозначается |M|.
Расстоянием между вершинами u и v (обозначается d(u,v)) называется
длина кратчайшей цепи u,v, а сама кратчайшая цепь называется
геодезической.
45
 Если не существует цепи, соединяющей вершины
u и v, то по
определению d(u,v) = +.
Диаметром графа G (обозначается D(G)) называется длина длиннейшей
геодезической.
Максимальным удалением в графе G от вершины v называется r(v) = max
d(v,v’),  v’V. Вершина v графа G является его центром, если максимальное
удаление от нее до всех вершин принимает наименьшее значение.
Множество вершин, находящихся на одинаковом расстоянии n от вершины
v, называется ярусом (обозначается D(v,n)): D(v,n) = {uV | d(v,u) = n}.
Пример 3.8 Граф, любая из вершин которого является его центром
– максимальное удаление до всех вершин от любой =1.
3.2.3 Связность
Если две вершины u и v в графе можно соединить цепью, то такие
вершины связаны. Граф называется связным, если в нем связаны все вершины.
Легко видеть, что отношение связности на множестве вершин является
отношением эквивалентности. Данное отношение разбивает множество вершин
графа на классы, объединяющие вершины, связанные друг с другом. Такие
классы называются компонентами связности; число компонент связности
обозначается k(G).
Граф G является связным тогда и только тогда, когда он имеет одну
компоненту связности: k(G) = 1. Если k(G) > 1, то это несвязный граф. Граф,
состоящий только из изолированных вершин (в котором k(G)=|V|, r(G)=0),
называется вполне несвязным.
v2
v5
v1
Пример 3.9 Граф на рисунке имеет две
v6
компоненты связности.
v4
v3
v7
Вершина графа, удаление которой увеличивает число компонент
связности, называется разделяющей или точкой сочленения.
Ориентированный граф G(V,E) является слабо связным (слабым), если
симметричное замыкание множества E определяет связный граф (иными
словами, если после замены всех дуг графа G ребрами полученный граф будет
связным).
Ориентированный граф является сильно связным (сильным), если для
любой пары вершин u,vV существует ориентированный путь из u в v (т.е. из
любой вершины графа достижимы все его остальные вершины).
Если для любой пары вершин по крайней мере одна достижима из другой,
то такой граф является односторонне связным, или односторонним. Граф,
состоящий из одной вершины, по определению считается сильно связным.
 Множества вершин связных компонент образуют разбиение множества
вершин графа.
46
3.2.4 Подграфы
Граф G’(V’,E’) называется подграфом графа G(V,E): G’(V’,E’)  G(V,E),
если V’ V и E’ E, и каждое из ребер E’ инцидентно только вершинам из V’.
Если G’ G и множества вершин этих графов не равны, как и множества
ребер, то подграф G’ является собственным подграфом графа G (Прим. 3.10, б).
Если множества вершин этих графов совпадают и в графе G’ нет циклов,
то G’ называется остовным подграфом (остовом, каркасом) графа G (т.е. он
содержит все вершины исходного графа и некоторый поднабор его ребер).
 Очевидно, что остов существует в каждом графе. Для его получения нужно
удалить «лишние» ребра, разрушив циклы в каждой связной компоненте.
Остовный подграф для графа G можно построить не единственным
образом. В общем, если (n,m)-граф G имеет k компонент связности, то для
получения его остова из графа необходимо удалить (m–n+k) ребер.
Пример 3.10 (4,6)-граф G (а), его подграфы (б, в), причем б) – собственный
подграф; 2 различных каркаса (г, д). Удаление ребер для получения
остовного подграфа: (m–n+k) = 6 – 4 + 1 = 3.  из исходного графа требуется
удалить 3 ребра (так, чтобы сохранились все вершины исходного графа и не
стало циклов).
а)
б)
в)
г)
д)
3.2.5 Контрольные вопросы
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Что такое степень вершины? Чем висячая вершина отличается от
изолированной?
Какой граф называется регулярным?
Как связаны степень вершины и полустепень исхода, полустепень захода?
Что такое маршрут? Чем отличается замкнутый маршрут от открытого?
Какой маршрут называется цепью? Какая цепь является простой?
Чем цикл отличается от пути? А от контура?
Как определить длину маршрута? В чем она выражается?
Что такое расстояние между вершинами?
Что такое геодезическая? Как определяется диаметр графа?
Какой граф называется связным? Как называются классы эквивалентности
вершин графа по отношению связности?
Может ли граф состоять из одних изолированных вершин и не иметь
ребер? Сколько компонент связности имеет такой граф?
В чем различие между сильной и слабой связностью орграфа?
Что такое собственный подграф?
Какой подграф называется каркасом?
47
3.3 Виды графов и операции над ними
3.3.1 Тривиальные и полные графы
Наиболее простое строение имеют пустые и полные графы.
Граф, состоящий из одной вершины, называется тривиальным. Граф, в
котором нет ребер, называется пустым (т.е. пустой граф состоит из одних
изолированных вершин).
Граф, состоящий из простого цикла с k вершинами, обозначается Ck.
Например, C3 – треугольник, C4 – квадрат.
Граф с n вершинами называется полным, если любые две его вершины
смежны. Такой граф обозначается Kn, он имеет максимально возможное число
ребер, равное n(n–1)/2.
Пример 3.11
●
С3
K3
K4
K5
●
●
●
пустой граф
 Очевидно, что в пустом графе все вершины изолированные, а в полном
степень каждой вершины на 1 меньше порядка графа: deg(v)=n–1 vV.
Полный направленный орграф называется турниром.
Утверждение:
Всякий полный граф является регулярным; обратное же не верно. Для
подтверждения достаточно рассмотреть квадрат, который является регулярным
графом (степени всех вершин одинаковы и равны 2), но не является полным.
Полный граф G(V,E) соответствует универсальному бинарному
отношению E на множестве вершин V (т.е. u,vV (u,v)E – любые два
элемента (вершины) связаны этим отношением).
3.3.2 Двудольные графы
Двудольный граф (или биграф, или четный граф) – это граф G(V,E) такой,
что множество вершин разбито на два непересекающихся подмножества V1 и
V2: V1V2=V, V1V2= так, что любое ребро соединяет вершину из V1 с
вершиной из V2. Тогда множества V1 и V2 называются долями графа G.
Если граф содержит все ребра, соединяющие множества V1 и V2, то он
называется полным двудольным графом. Если |V1|=m и |V2|=n, то полный
двудольный граф обозначается Km,n.
Пример 3.12 На рисунке показан полный двудольный
граф K3,3.
Теорема 3.2 Граф является двудольным тогда и только тогда, когда все
его простые циклы имеют четную длину.
48
Двудольные графы удобны для представления бинарных отношений
между элементами двух разных типов, например: множества {исполнители} и
{виды работ}. Тогда отношением E может быть «данный исполнитель может
выполнять данную работу».
3.3.3 Плоский (планарный) граф
Граф называется планарным, если он может быть изображен на плоскости
так, что вершинам соответствуют различные точки плоскости, а линии,
соответствующие ребрам, не пересекаются. Геометрическая фигура,
являющаяся изображением планарного графа, называется плоским графом.
Говорят, что плоский граф допускает правильную укладку на плоскости.
К рассмотрению планарных графов сводятся такие задачи, как задача о
раскраске карт, задача о проектировании коммуникаций, и т.д.
Любая правильная укладка связного графа порождает разбиение плоскости
на отдельные области (грани). Такое разбиение называется плоской картой.
Внутренней гранью плоского связного графа называется конечная область
плоскости, ограниченная замкнутым маршрутом и не содержащая внутри себя
ни вершин, ни ребер графа. Этот маршрут называется границей грани. Часть
плоскости, состоящая из точек, не принадлежащих ни графу и ни одной из его
внутренних граней, называется внешней гранью.
Для любой плоской карты имеет место формула Эйлера: n – m + r = 2, где
n – число вершин, m – число ребер, r – число областей карты (включая
внешнюю область).
Пример 3.13 Полный двудольный граф K3,3. и
4
полный граф K5 не являются плоскими.
1 2
Граф K4 является планарным: см. рисунок.
3
1,2,3 – его внутренние грани, 4 – внешняя грань.
3.3.4 Направленные орграфы и сети
Если в графе ориентировать все ребра, то получится орграф, который
называется направленным. Направленный граф не имеет симметричных пар
ориентированных ребер (т.е. в нем не может быть одновременно дуг (u,v) и
(v,u)).
Если в орграфе полустепень захода некоторой вершины равна нулю, то
такая вершина называется источником; если нулю равна полустепень исхода,
то такая вершина называется стоком. Направленный орграф с одним
источником и с одним стоком называется сетью.
2
Пример 3.14 Граф на рисунке является сетью, вершина 1 –
1
3
5
источником, а вершина 5 – стоком.

4
49
3.3.5 Операции над графами
С помощью различных операций можно строить графы из более простых,
переходить от одного графа к более простому, разбивать графы на более
простые и т.д. Операции могут быть одноместными и двуместными.
Рассмотрим эти операции в порядке возрастания их сложности (начнем с
одноместных).
1. Дополнением графа G1(V1,E1) называется граф G2(V2,E2), у которого
множество вершин такое же, как у исходного графа, а множество ребер
представляет собой дополнение до множества E1: V2=V1, E=E1 =V1V1\E1.
Вершины графа G2 смежны только в том случае, когда они не смежны в
исходном графе. Обозначение: G1(V1,E1). Дополнение графов есть
дополнение отношений.

Пример 3.15 Дополнение к полному графу – пустой граф.
Другой пример показан на рисунке.
2.
Удаление вершины v из графа G1(V1,E1) (при условии vV1): вершина v
удаляется из множества V1, а из множества ребер удаляются ребра,
инцидентные этой вершине: V = V1\{v}, E= E1\{e = (v1,v2) | v1 = v или v2 = v}.
Обозначение: G = G1(V1,E1)–v.
Пример 3.16 C3 – v = K2.
3.
v
Добавление вершины v в граф G1(V1,E1) (при условии vV1): во множество
вершин добавляется вершина v: V = V1{v}, E = E1. Обозначение:
G = G1(V1,E1) + v.
Удаление ребра e из графа G1(V1,E1) (при условии eE1): из множества
ребер удаляется ребро e: V = V1, E= E1 \ {e}; его вершины сохраняются.
Обозначение: G = G1(V1,E1)–e.

Пример 3.17 K2 – e =K2.

4.
5.
Добавление ребра e в граф G1(V1,E1) (при условии eE1): во множество
ребер добавляется ребро e: V = V1, E = E1{e}. Обозначение:
G = G1(V1,E1)+e.
6.
Отождествление вершин v1,v2 графа G1(V1,E1): замена этой пары новой
вершиной v, причем все ребра, которые вели в удаленные вершины,
заменяются ребрами, ведущими в v. Если эти вершины были смежными, то
их отождествление называется стягиванием ребра.
Пример 3.18 (4,4)-граф после стягивания u
1
ребра превратился в K2.
7.
u4
u1
u3
Стягивание подграфа А графа G1(V1,E1) u2
u3
(при условии AV1): из множества вершин удаляется множество A и
заменяется новой вершиной v, все ребра, которые вели в вершины из А,
50
заменяются ребрами, ведущими в v. V = V1 \ A  {v}, E= E1 \ {e = (u,v) | uA
или v A}{e = (u,v) | uГ(A)\A}. Обозначение: G = G1(V1,E1)/A.
Пример 3.19 K4 / C3 =K2.
8.
Подразбиение ребра графа G1(V1,E1): удаление ребра и добавление новой
вершины, которая соединяется ребром с каждой вершиной удаленного
ребра.
Размножение вершины v графа G1(V1,E1) (при условии vV1, v’V1): во
множество вершин добавляется вершина v’, во множество ребер – ребра,
соединяющие новую вершину v’ с вершиной v и со всеми смежными с ней
вершинами. V = V1  {v’}, E = E1  {(v,v’)} 
{e = (u,v’) | uГ+(v)}.
Обозначение: G = G1(V1,E1)v.
Пример 3.20 K2v =C3; C3v =K4 …
9.
10. Объединением графов G1(V1,E1) и G2(V2,E2) (при условии, что их
множества вершин, как и множества ребер, не пересекались) называется
граф G(V,E), в котором V = V1V2, E = E1E2. Обозначение: G = G1G2.
Пример 3.21 K3,3.= C3C3. Любой граф является объединением своих
компонент связности.
11. Соединением графов G1(V1,E1) и G2(V2,E2) (также при условии, что их
множества вершин и множества ребер не пересекались) называется граф
G(V,E), в котором V = V1V2, E= E1E2{e=(v1,v2) | v1 V1, v2 V2}.
Иными словами, строится объединение графов и добавляются ребра,
соединяющие графы G1(V1,E1) и G2(V2,E2). Обозначение: G = G1+G2.
Пример 3.22 Km,n.=Km +Kn.
12. Произведением графов G1(V1,E1) и G2(V2,E2) (также при условии, что их
множества вершин и множества ребер не пересекались) называется граф
G(V,E). В нем V = V1×V2, и вершины (u1,u2) и (v1,v2) смежны только в том
случае, если либо u1=v1 и u2 смежна с v2, либо u2=v2 и u1 смежна с v1.
Обозначение: G = G1×G2.
(1,b)
Пример 3.23
(1,a)
1

a
b
(1,c)
c
2
(2,a)
(2,b)
(2,c)
Операции над графами могут использоваться для построения графов с
заданными свойствами.
3.3.6 Деревья
Деревья являются простейшим классом графов. Для них выполняются
многие свойства, которые не всегда выполняются для обычных графов. Кроме
того, деревья широко применяются в программировании при различного рода
обработке данных, в частности, в алгоритмах сортировки, кодирования и т.п.
51
Подробно алгоритмы работы с деревьями будут рассматриваться позднее в
других курсах, а сейчас только краткое знакомство.
Дерево – это связный граф без циклов. Несколько деревьев (или несвязный
граф без циклов) составляют лес. Таким образом, дерево является компонентой
связности леса.
Свойства дерева:
1. Любые две вершины в дереве связаны единственной простой цепью.
2. При удалении любого ребра дерева нарушается его связность.
3. Число вершин в дереве на единицу больше числа ребер.
Ориентированные
(упорядоченные)
деревья
используются
для
представления различного рода иерархических отношений. Они обладают
следующими дополнительными свойствами:
1. Существует единственный узел, у которого полустепень захода равна
нулю – корень дерева.
2. Полустепень захода всех остальных узлов равна 1.
3. Каждый узел достижим из корня.
4. Узлы дерева с нулевой полустепенью исхода принято называть листьями.
Пример 3.24 Свободные (а) и ориентированные (б) деревья с 4 узлами.
а)
б)
3.3.7 Контрольные вопросы
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Какой граф является пустым? Чем он отличается от тривиального?
Что означает обозначение C3? Чем этот граф отличается от K3? А чем
различаются C4 и K4?
Верно ли, что любой полный граф является регулярным?
Какой граф является двудольным? Чем отличается полный двудольный
граф? Какой граф обозначается K2,4.?
Дайте определение планарного графа.
Как определить число граней планарного графа?
Какой орграф является направленным графом?
Какой граф называется сетью?
Какой граф является дополнением к пустому графу?
Чем отличается удаление вершины от удаления ребра?
В чем различие операций стягивания ребра и отождествления вершин?
Чем отличается соединение графов от их объединения?
В каких деревьях существуют корень и листья?
Сколько существует различных неизоморфных деревьев с 5 вершинами?
52
3.4 Представление графов в ЭВМ
3.4.1 Требования к представлению графов
Чтобы задать граф, нужно каким-либо способом описать множество его
вершин, множество его ребер, а также указать, какие вершины и ребра
инцидентны (или смежны), т.е. задать отношение инцидентности (смежности).
Рассмотрим несколько способов представления графа в ЭВМ. Они
различаются объемом занимаемой памяти и скоростью выполнения операций
над графами. Представление выбирается по потребностям конкретной задачи.
Напоминание: число вершин графа обозначаем через n, а число ребер –
через m. Характеристика M(n,m), приведенная для каждого представления,
означает требуемый для него объем памяти.
 Указанные представления пригодны для графов и орграфов, а после
некоторой модификации – для псевдографов, мультиграфов и гиперграфов.
Все
представления
будем
u2
u2
u1
e1
u1
e1
иллюстрировать на конкретных примерах G
D
e5
e5
e
e
e4
e2
4
2
графа G и орграфа D (см. рисунок.).
e3
e3
●u3
u4
u3
u4
3.4.2 Способы представления графа
1) Матрица смежности.
Матрица смежности A(G’) графа (орграфа) – это квадратная матрица
размера nn, у которой для любых i,j {1,2,…,n} элемент в i-й строке и j-м
столбце равен 1, если i-я и j-я вершины соединены ребром (дугой с началом в
вершине i), и равен 0 в противном случае.
1, если вершины vi и v j  смежные (для орграфа дуга идет из vi в v j )
aij  
иначе
0,
2
Память M(n,m)=O(n ).
Фактически это уже знакомая нам матрица бинарного отношения.
Очевидно, что матрица смежности неориентированного графа является
симметричной, элементы главной диагонали равны нулю, а количество единиц
в каждой строке равно степени вершины, которой соответствует эта строка. По
матрице смежности легко построить диаграмму графа.
Матрица смежности орграфа, не являющегося мультиграфом, не может
быть симметричной, т.к. при ее составлении вершины орграфа играют
различные роли.
Пример 3.25 Матрицы смежности для заданных графа G и орграфа D
 0 1 0 1
 0 1 0 0
u2
u2
u1
e1
u1
e1




1
0
1
1
0
0
1
1




G
D
A(G )  
A(D )  
e5
e5
e
e
e
e2
0 1 0 1
0 0 0 0
4
2
4


 1 1 1 0

 1 0 1 0

e3
e3




●u3
u4
u3
u4
53
 В матрице смежности мультиграфа или псевдографа число, находящееся
на пересечении i-й строки и j-го столбца, совпадает с числом ребер,
соединяющих вершины i и j, при этом каждая петля считается двумя ребрами.
Пример 3.26 Псевдограф, изображенный на рисунке, имеет
0
матрицу смежности следующего вида: A(P)   2
1

1

2
0 
2
2
2
2
1
3
2) Матрица инцидентности.
Другой способ задать граф – определить матрицу инцидентности (или
инциденций) I(G), имеющую n строк и m столбцов, элементы которой задаются
следующим образом:
1, если вершина vk инцидентна ребру еl
ik l  
0, иначе
Для ориентированного графа:
 1, если вершина vk инцидентна ребру еl и является его концом

ik l   0, если вершина vk и ребро еl не инцидентны
 1, если вершина v инцидентна ребру е и является его началом.
k
l

Пример 3.27 Матрицы инцидентности для заданных графа G и орграфа D
1

1
I (G )  
0

0

0
1
0
0
1
0
1
0
1
1
0
1
0

1
0

1

 1

 1
I (D )  
0

 0

0
1
0
0
1
0
1
0
1
1
0
1
0 

 1
0 

1 

Очевидно, что в каждом столбце матрицы инцидентности только два
элемента отличны от 0 (или один, если ребро является петлей), т.к. ребро может
быть инцидентно не более чем двум вершинам (а столбец соответствует ребру).
Поэтому матрица содержит много нулей и такой способ описания неэкономен.
M(n,m)=O(nm).
3) Списки смежности.
Граф представляется с помощью списочной структуры (списка
смежности), отражающей смежность вершин и состоящей из массива
указателей на списки смежных вершин. Элемент списка представлен
структурой с двумя полями: номер вершины и указатель. Для
неориентированных графов M(n,m)=O(n+2m), для орграфов M(n,m)=O(n+m).
Пример 3.28 Списки смежности для заданных графа G и орграфа D:
2
4
1
3
2
4
1
2
2
4
3
4
3
1
3
54
4) Массив ребер (дуг).
Отношение инцидентности можно задать также
Каждая строка этого списка соответствует ребру, в
вершин, инцидентных ему. M=O(2m).
Пример 3.29 Представление с помощью массива
ребер (дуг) для заданных: графа G (левый столбец)
и орграфа D (правый столбец). В массиве
перечислены ребра (дуги) путем указания
инцидентных им вершин.
списком ребер графа.
ней записаны номера
нач кон нач кон
1
2
1
2
1
4
2
3
2
3
2
4
2
4
4
1
3
4
4
3
По списку ребер графа легко построить матрицу инцидентности, т.к.
каждое ребро этого списка соответствует столбцу матрицы, а номера вершин в
каждом элементе списка – это номера строк матрицы инцидентности, элементы
в которых равны 1. Для орграфа координата начала – номер строки, где стоит
–1, а координата конца – номер строки, где стоит 1.
3.4.3 Обходы графов
Обход графа – это некоторое систематическое перечисление его вершин
(ребер). Среди всех обходов наиболее известны поиск в глубину и в ширину.
Алгоритмы такого поиска лежат в основе многих алгоритмов на графах.
При поиске используется некоторая структура данных Т, в которую
помещаются вершины графа. Для обозначения пройденных вершин заводят
дополнительный массив пометок этих вершин.
Поиск основывается на следующих действиях.
1. Сначала все вершины считаются неотмеченными.
2. Выбирается любая вершина (начало поиска), заносится в структуру
данных Т и помечается.
3. Следующие действия выполняются в цикле до тех пор, пока структура Т
не станет пустой:
– из структуры данных Т выбирается вершина u;
– она выдается в качестве очередной пройденной вершины;
– перебираются все вершины из Г(u), и все те, которые не помечены, тоже
заносятся в структуру Т и помечаются.
Если Т – это стек (LIFO), то обход называется поиском в глубину (т.е.
первым делом из структуры Т извлекается вершина, попавшая туда последней).
Если Т – это очередь (FIFO), то обход называется поиском в ширину. При
поиске в глубину находятся более длинные пути.
Теорема 3.3 Если граф G связен и конечен, то поиск в ширину или поиск в
глубину обойдет все вершины графа по одному разу.
Доказательство. 1. Единственность обхода. Обходятся только вершины,
попавшие в Т. Для помещения в Т выбирают только неотмеченные вершины;
при попадании в Т вершина отмечается   вершина будет обойдена по 1 разу.
2. Завершаемость алгоритма. Всего в Т может попасть не более m вершин; на 
шаге одна вершина удаляется из Т  алгоритм stop не >, чем через m шагов.
55
3. Обход всех вершин. От противного. Предположим, что алгоритм закончил
работу, а вершина w не обойдена. Значит, она не попала в Т и не была
отмечена.  все вершины, смежные с ней, не были обойдены и отмечены.
Аналогично, любые вершины, смежные с неотмеченными, сами не отмечены.
Но граф G связен, значит, существует путь v,w; значит, вершина v не
отмечена. Но она была первой отмеченной вершиной! Противоречие.
Пример 3.30 Рассмотрим алгоритмы поиска в глубину и в 1
2
3
4
ширину на примере. В качестве стартовой возьмем
вершину с номером 3. Тогда поиск в ширину даст
5
6
7
последовательность
вершин:
3T.
T={3}
3: 8
{2,5,6,4}T; T={2,5,6,4} 2: {1}T; T={5,6,4,1} 5:
9
{8,9}T; T={6,4,1,8,9} 6: {7}T; T={4,1,8,9,7}.
Окружения всех этих вершин уже отмечены  они будут выданы по порядку.
Итак, выполнен обход всех вершин графа в следующем порядке:
2
3
4
3,2,5,6,4,1,8,9,7. При поиске в глубину начало такое же: 1
3T. T={3}  3: {2,5,6,4}T; T={2,5,6,4} 4: {7}T;
T={2,5,6,7} 7: {9}T; T={2,5,6,9}  9: {8}T;
5
6
7
T={2,5,6,8} 8: {1}T; T={2,5,6,1}. Оставшиеся 8
вершины
выдаются
по
порядку.
В
итоге
9
последовательность вершин: 3,4,7,9,8,1,6,5,2.
Любой из рассмотренных обходов позволяет построить остовное дерево
исходного графа с корнем в исходной вершине (связный подграф без циклов).
3.4.4 Контрольные вопросы
Какие существуют способы представления графа в ЭВМ?
Как отличаются размеры матриц смежности и инцидентности одного
графа?
3. Матрица смежности какого графа симметрична – простого или
ориентированного?
4. Чем отличаются матрицы смежности псевдографа и простого графа?
5. Какова особенность матрицы инцидентности?
6. Какой объем памяти требуется для представления графа при помощи
массива ребер (дуг)?
7. Как можно задать граф с помощью списков смежности?
8. Что такое обход графа? Какие виды обходов Вы знаете?
9. В чем различие между поиском в глубину и поиском в ширину?
10. Что является условием окончания обхода графа при поиске в глубину (в
ширину)?
11. В каком графе поиск в ширину или поиск в глубину обойдет все вершины
ровно по одному разу?
12. Как получить разные каркасы графа, используя только поиск в ширину?
1.
2.
56
3.5
Алгоритмы на графах
3.5.1 Выделение компонент связности в орграфах
Компоненты сильной связности (КСС) орграфа G – это его максимальные
сильно связные подграфы. Каждая вершина орграфа принадлежит только одной
КСС. Если вершина не связана с другими, то считается, что она сама образует
КСС. Орграф, который получается стягиванием в одну вершину каждой КСС,
называется фактор-графом, или конденсацией орграфа G.
Пример 3.31 Слева на рисунке орграф,
справа – его фактор-граф. Овальными
линиями показаны КСС, стянутые в
одну вершину фактор-графа.
a
a
c
b
c
b
Для выделения компонент сильной связности орграфа можно в качестве
основы алгоритма использовать метод поиска в глубину.
Теорема 3.4 Любой
граф представляется
в виде объединения
непересекающихся связных (сильных) компонент. Разложение графа на
связные (сильные) компоненты определяется однозначно.
3.5.2 Кратчайшие пути
Задача поиска кратчайшего пути (наиболее дешевого или короткого) «от
пункта A до пункта В» имеет массу практических приложений и различные
алгоритмы решения. Математическая постановка задачи имеет следующий вид.
Рассматривается взвешенный граф (орграф) G(V,E), ребрам (дугам)
которого сопоставлены веса, обозначающие длину (или стоимость) пути из
одного конца ребра в другой. Если из вершины vi нет ребра (дуги) в вершину vj,
то вес ребра (vi,vj) считается равным . Для ребер, являющихся петлями
(диагональ матрицы смежности), их веса считаются равными 0. Все
компоненты матрицы – веса ребер, соединяющих соответствующие вершины.
Требуется определить кратчайший путь из одной вершины в другую.
Наиболее широко известны два алгоритма поиска кратчайших путей.
Алгоритм Дейкстры находит кратчайшее расстояние от одной фиксированной
вершины до другой и указывает сам путь, длина которого равна этому
расстоянию. Алгоритм Флойда-Уоршалла позволяет найти кратчайшие
расстояния между всеми парами вершин графа.
Алгоритм Дейкстры
Находит кратчайшее расстояние от вершины v1 до вершины vn
Идея: Идем по вершинам, постепенно удаляясь от старта, при этом на
каждом шаге для каждой вершины определяем самый короткий до нее путь из
старта и запоминаем его.
Каждой вершине vk ставится в соответствие упорядоченная пара (m,vr), где
первая координата означает наименьшее на текущий момент расстояние от
57
старта – v1 – до вершины vk, а вторая координата указывает на предыдущую
вершину на этом пути. Первоначально все вершины помечены парами (,0) и
имеют статус временных. Постепенно по мере нахождения кратчайшего пути
часть вершин становятся постоянными. Алгоритм заканчивает работу, когда
постоянной станет вершина vn.
Алгоритм состоит из следующих шагов:
1. Начать в вершине v1(,0), заменить ее метку на v1(0,0) и сделать эту
вершину постоянной.
2. Пока vn не станет постоянной вершиной, проделывать следующие шаги:
a. Если вершина vk(m,vr) стала постоянной, то для всех смежных с ней
временных вершин vj вычислить m+d(vk,vj) и сравнить с текущим
расстоянием, которым помечена вершина vj. Если полученная сумма
меньше, то текущее расстояние заменить ею, а вторую координату
заменить на vk.
b. Найти минимум из расстояний, приписанных временным вершинам.
Первую из таких вершин сделать постоянной.
3. Когда vn станет постоянной вершиной, то расстояние, приписанное ей –
это и есть длина кратчайшего пути. Сам путь (в обратном порядке) можно
отследить, если пройти в обратную сторону – от вершины vn к v1 – по вторым
координатам меток вершин.
D(,0)
7
B(,0)
Пример 3.32 Найти кратчайший путь из вершины
5
2
А в вершину F во взвешенном графе. Вершины A(,0)
10
снабжаем пометками, и в графе будут
3
2
F(,0)
6
присутствовать метки (,0), пока не найден путь.
4
C(,0)
Вершины,
которые
будут
становиться
7
постоянными, выделяем жирным шрифтом.
E(,0)
D(,0)
7
B(,0)
5
A(0,0)
6
2
3
C(,0)
5
A(0,0)
F(,0)
4
7
E(,0)
2
6
3
5
C(6,A)
10
2
F(,0)
4
7
D(12,B)
7
B(5,A)
A(0,0)
10
2
D(,0)
7
B(5,A)
6
2
10
3
2
C(6,A)
E(,0)
F(15,B)
4
7
E(7,B)
а)
б)
в)
Вершина А стала постоянной (рис. а), с ней смежные В и С  для них нашли
расстояния (это 5 и 6), заменили метки на (5,А) и (6,А). Минимальное из
расстояний 5  вершина В(5,А) становится
D(12,B)
7
B(5,A)
постоянной (рис. б). Вычисляем расстояния от
нее до смежных с ней С, Е, F, D. Расстояние
5
2
до С будет 5+3=8  оно больше текущего (6) A(0,0)
10
3
 метка вершины С не меняется. Все
2
6
F(11,Е)
остальные расстояния меньше   метки
4
C(6,A)
7
E(7,B)
58
остальных вершин заменяются. Изо всех текущих меток расстояний
min{12,15,7,6} = 6  вершину С(6,А) делаем постоянной (рис. в). Смежная с
ней временная вершина Е, расстояние до нее через С 6+7=13>7  изменений
нет. Теперь из временных вершин min=7  вершина Е(7,В) становится
постоянной. 7+4=11<15  метка вершины F меняется на F(11,E) и она
становится постоянной. Алгоритм завершен, расстояние от А до F равно 11, а
кратчайший путь – A,B,E,F.
Алгоритм Флойда-Уоршалла
Находит кратчайшие расстояния между всеми парами вершин графа
Идея: Строится специальная матрица D, элементы которой – кратчайшие
пути между всевозможными парами вершин графа G. При определении
кратчайшего пути выбирается минимум из «прямого» расстояния между
смежными вершинами vi и vj и суммарного расстояния при проходе через
дополнительную вершину. Затем – более длинные пути и т.д.
Обозначим через d i(mj) длину кратчайшего пути из vi в vj с промежуточными
вершинами во множестве {v1,…,vm}. Алгоритм использует три правила:
1) d i( 0j )  ai j – вес дуги, соединяющий вершины vi и vj (т.е. первоначально
матрица D – это исходная матрица весов).
2) di( mj1)  min di( mj) , di(,mm)1  dm( m1), j .


3) Длина кратчайшего пути из вершины vi в вершину vj: d vi , v j   d i( nj ) .
Алгоритм строит матрицу за n шагов, т.е. строится матрица D(1), …, D(n)=D.
Пример 3.33 Найдем матрицу кратчайших расстояний для графа.
v1 v2 v3
D (0)
0

3


8
0
2
5  v1

  v2
0  v3
v2
3
2
8
5
v1
v3
Элементы матрицы D(1) находим по правилу d i(1j)  min d i( 0j ) , d i(10)  d1( 0j ) . Первая
строка и первый столбец не меняются. Получаем
Элементы матрицы D(2) находим по правилу d
изменений второй столбец и вторая строка.
D
( 2)
( 2)
ij
 min d , d
0

 3
5

Элементы матрицы D(3) находим по правилу d
D
( 3)
0

 3
5

7
0
2
5

8 ,
0 
D  D ( 3) .
D
(1)
(1)
ij
8
0
2
( 3)
ij
0

 3


(1)
i2
d
8
0
2
(1)
2j
.
5

8 .
0

Без
5
.
8
0 
2
 min d i( 2j ) , d i(32)  d 3( 2j ) .
Каждый из элементов (i,j) матрицы D равен
наименьшему расстоянию между вершинами vi и vj.
59
3.5.3 Минимальный остов
Эта задача возникает при проектировании линий электропередач,
трубопроводов, дорог и т.д., когда требуется заданные центры (вершины графа)
соединить некоторой системой каналов связи таким образом, чтобы любые два
центра были связаны непосредственно или через другие каналы, и чтобы общая
длина (стоимость) каналов связи была минимальной.
Для постановки и решения задачи дадим некоторые определения.
Вес остовного дерева взвешенного графа равен сумме весов, приписанных
его ребрам. Минимальным остовным деревом называется остовное дерево
графа с минимальным весом.
Математическая формулировка задачи: во взвешенном связном графе
G(V,E) найти минимальное остовное дерево T(V,E’).
Рассмотрим алгоритм Краскала (Cruskal) решения этой задачи. Идея
алгоритма состоит в том, чтобы постепенно формировать дерево Т(V,E’),
выбирая ребра с наименьшим весом так, чтобы не возникало циклов.
Первоначально множество Е’ пустое, V – множество вершин графа, Т
пустое. Два следующих действия выполняются до тех пор, пока это возможно.
1) Выбрать ребро минимального веса в исходном графе G, не принадлежащее
множеству Е’, так, что его добавление в Е’ не создает цикла в дереве Т.
2) Добавить это ребро во множество ребер Е’.
2
Пример 3.34 Найти минимальный остов во
взвешенном графе.
Построение остова начнем с ребра (v1, v3).
Порядок присоединения ребер к остову:
(v1, v3), (v2, v5), (v1, v2) (или (v1, v5)), (v4, v5).
Вес остова W=1+2+1+4=8.
v1
v2 1
2
8
3
1
v5
4
5
v3
v4
3.5.4 Эйлеровы графы
Цикл в графе называется эйлеровым, если он содержит все ребра графа.
Связный граф, в котором существует эйлеров цикл, называется эйлеровым
графом. Эйлеровой цепью (или путем) является цепь (путь), которая включает
все ребра (дуги) графа по одному разу. Собственная эйлерова цепь – это
эйлерова цепь, которая не является эйлеровым циклом.
Эйлеров граф можно нарисовать, не отрывая
карандаша от бумаги. Известные примеры
эйлеровых графов приведены на рисунке.
Теорема Эйлера-2. Связный граф является
эйлеровым тогда и только тогда, когда
степени всех его вершин четны.
сабли Магомета
звезда Давида
Пример 3.35 Вспомним задачу о кенигсбергских мостах. Она
сводится к вопросу – является ли граф, представляющий эту
60
задачу, эйлеровым? Если вершины будут обозначать участки суши, а ребра –
мосты, то получим граф следующего вида:
Очевидно, что этот граф не эйлеров, т.к. все его вершины имеют нечетные
степени; поэтому требуемый цикл не существует. Если отменить требование
возврата в ту же точку, то вопрос о пути по всем мостам сведется к вопросу о
существовании собственной эйлеровой цепи.
Теорема 3.5 Граф имеет собственную эйлерову цепь (путь)  когда он
связный и ровно две его вершины имеют нечетную степень.
Вершины нечетной степени являются началом и концом эйлеровой цепи.
Если снова вернуться к рассмотренному примеру, то увидим, что эйлерова
цепь в нем также не существует, т. к. вершин нечетной степени в нем 4.
А теперь разберемся, как найти эйлеров цикл. Сначала вспомним еще одно
определение.
Мостом (или перешейком) называется такое ребро графа G, удаление
которого увеличивает число связных компонент. Если ребро r принадлежит
некоторому циклу C, то оно не может быть мостом.
Пример 3.36 В данном графе ребра r1 и r2
являются мостами.
r1
r2
Для нахождения эйлеровой цепи в связном графе, который имеет вершины
только четной степени, используют алгоритм Флери:
1) Движение начинается из произвольной вершины графа; идем по ребрам,
включая эти ребра в эйлерову цепь и удаляя их из графа.
2) В очередной вершине выбираем путь по перешейку только в том случае,
если нет пути по циклу.
3) Если в графе остаются ребра, которые нельзя использовать для
продолжения имеющегося пути, то следует начать строить простой замкнутый
цикл из уже пройденной вершины и инцидентного ей ребра, если последнее
ранее не использовалось.
v5
e1
Пример 3.37 Пусть требуется построить эйлеров цикл
e2
v4
для графа, изображенного на рисунке. Начать v1
e5
построение эйлерового цикла можно с любого ребра
e4 e3
e7
e6
графа. Начиная с е1, получим цикл v1, e1, v5, e2, v4 ,e3, v3
v3
,e4 , v4 ,e5 ,v1,e6 ,v3, e8, v2, e7 ,v1. В данном случае сразу v2
e8
получили эйлерову цепь.
3.5.5 Гамильтоновы графы
Гамильтонова цепь (путь) – это простая цепь (путь), которая проходит
через каждую вершину (узел) графа ровно по одному разу. Соответственно
гамильтонов цикл – это простой цикл, который проходит через каждую
вершину графа.
Граф, содержащий гамильтонов цикл, называется гамильтоновым графом.
61
Пример 3.38 Гиперкуб порядка n при n  3 имеет гамильтонов цикл. Этот
цикл описывается кодом Грея (каждые два соседних набора отличаются ровно
одним разрядом  на графе они соединены ребром). (000, 001, 011, 111, 101,
100, 110, 010, 000).
В отличие от эйлерова графа, не существует четкого критерия для
определения, является ли граф гамильтоновым.
В качестве практического применения задачи поиска гамильтонова пути
можно назвать т.н. задачу коммивояжера. В ней требуется осуществить обход
всех населенных пунктов, посещая каждый по разу, и при этом постараться
пройти минимальное расстояние.
3.5.6 Контрольные вопросы
Что такое компонента сильной связности? Как можно найти КСС в
орграфе?
2. Какие существуют алгоритмы решения задачи поиска кратчайших путей?
В чем их различие?
3. Какие пометки вершин используются в алгоритме Дейкстры и как с их
помощью можно получить кратчайший путь?
4. Какая матрица используется в алгоритме Флойда-Уоршалла? Что
представляет из себя итоговая матрица?
5. Какое практическое применение имеет задача поиска минимального
остова?
6. Единственным ли образом можно построить минимальный остов
взвешенного графа?
7. Какой граф называется Эйлеровым?
8. Как можно проверить наличие в графе эйлерова пути или цикла?
9. Какой алгоритм используется при нахождении эйлеровой цепи?
10. Что такое гамильтонов граф?
11. Каково практическое применение задачи поиска гамильтонова пути в
графе?
1.
62
Download