Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции ДМ.doc
Скачиваний:
133
Добавлен:
21.11.2019
Размер:
4.91 Mб
Скачать

Лекция 19

ТЕМА: ЭЙЛЕРОВЫ И ГАМИЛЬТОНОВЫ ЦЕПИ И ЦИКЛЫ

ПЛАН:

  1. Эйлеровы цепи и циклы

  2. Гамильтоновы циклы и цепи

Главная

  1. Эйлеровы цепи и циклы

Классической в теории графов является следующая задача. В городе Кенигсберге имеется два острова, соединенных семью мостами с берегами реки Преголь и друг с другом , как показано на рисунке.

Задача состоит в следующем: осуществить прогулку таким образом, чтобы , пройдя по одному разу по каждому мосту, вернуться обратно. Решение этой задачи сводится к поиску некоторого специального маршрута.

Пусть G(V, X) – псевдограф. Цепь (цикл) в G(V, X) называется эйлеровой (эйлеровым), если она (он) проходит по одному разу через каждое ребро графа G(V, X).

Поставим в соответствие схеме мультиграф , в котором каждой части суши соответствует вершина, а мостам – ребра. На языке теории графов задача прозвучит так : найти эйлеров цикл в мультиграфе G(V, X).

V1

V2

V3

V4

Прежде чем решать задачу о выделении эйлерова цикла или эйлеровой цепи, очевидно нужно выяснить , существуют ли они. Необходимым условием существования эйлерова цикла или цепи является связность графа.

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

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

Доказательство проведем по индукции.

Пусть G содержит только одно ребро, тогда это ребро – петля, т.к. нет висячих вершин, а петля – это простой цикл.

v

x

Пусть G содержит два ребра, тогда это кратные ребра. И, следовательно, простым циклом является v x1 w x2 v:

Пусть граф не содержит кратных ребер, т.е G – граф и v1 , v2 – произвольные смежные вершины графа. Рассмотрим последовательность v1, v2, v3…вершин графа G такую, что для любого i  3 вершины vi , v i-1 смежны и vi  vi-2 :

vi-2 vi-1 vi

Поскольку в графе нет висячих вершин, то такую последовательность можно продолжать неограниченно. Используя конечность множества вершин графа, получаем, что обязательно произойдет совпадение vi = vj , где 1 i < j – 2. Пусть это будет первое совпадение, т.е. совпадение с наименьшим номером j. Тогда последовательность vi v i+1 v i+2…vj – простой цикл в графе.

Введем обозначения: если 1 и 2 – циклы псевдографа G , имеющие хотя бы одну общую вершину и не имеющие общих ребер, то, очевидно, существует цикл, проходящий через все ребра , входящие в 1 и 2 . Обозначим 1 + 2 любой из таких циклов. Для любого цикла обозначим V() и X() соответственно множество вершин и множество ребер, входящих в .

Пусть - цикл без петель. Тогда для v V() количество ребер в Х(), инцидентных v , четно.

Поскольку в цикле  отсутствуют петли и все ребра попарно различны, то с каждым новым вхождением в  вершины v в этот цикл войдут также два новых инцидентных ей ребра, а следовательно, общее число ребер в Х() инцидентных v , четно.

Следствие. Если вершина входит в некоторый цикл. То она не может быть висячей.

Теперь сформулируем и докажем теорему о существовании в графе эйлерова цикла.

Для того, что бы связный псевдограф G обладал эйлеровым циклом, необходимо и достаточно, что бы степени его вершин были четными.

Необходимость. Пусть G обладает эйлеровым циклом.

Удалим из G все петли. Получим мультиграф G’ , который также обладает эйлеровым циклом. Т.к эйлеров цикл мультиграфа G' содержит все ребра из G', а следовательно, и все вершины из G', то в силу утверждения 2 степени всех вершин мультиграфа G' четны, откуда, учитывая то, что вклад петли в степень вершины, инцидентной этой петле, равен 2, получаем четность степеней всех вершин графа G.

Достаточность. Пусть m – количество ребер в G.

При m = 1 связный псевдорграф G с вершинами четной степени может выглядить только следующим образом: G(V, X), где V = {v}, X = {x = {v, v}}. Значит, G(V, X) – петля, а петля – это эйлеров цикл.

Предположим , что для некоторого целого m  2 достаточность доказана для всякого псевдографа с m -1 ребрами. Докажем справедливость для псевдографа с m ребрами.

Пусть в связном псевдографе G c m ребрами степени вершин четны. В силу утверждения 1 в G имеется простой цикл 0 . Если 0 содержит все ребра из G , то эйлеров цикл найден. В противном случае удаляем из G все ребра , содержащиеся в 0. в результате получим псевдограф G' , каждая компонента связности которогоявляется либо изолированной вершиной, либо псевдографом, степень каждой вершины которого четна. Пусть Gi , где i = 1, 2, …р – компоненты связности графа G',отличные от изолированных вершин. По предположеню, для каждого псевдографа Gi можно построить эйлеров цикл I . В силу связности G цикл 0 имеет общие вершины с любым из циклов i , где i = 1, 2, …р. Тогда искомым эйлеровым циклом в G является цикл :

 = (…((0 + 1 ) + 2) + …+ р).

Сформулируем и докажем теорему о существовании эйлеровой цепи в графе.

Для того, что бы связный псевдограф G обладал эйлеровой цепью, необходимо и достаточно, что бы он имел ровно две вершины нечетной степени.

Необходимость. Пусть G имеет эйлерову цепь, соединяющую v и w. Добавим к G дополнительное ребро {v, w}. Получим псевдограф G', обладающий эйлеровым циклом, а следовательно, степени вершин графа G' четны. Но тогда четны и степени вершин псевдографа G, за исключением вершин v и w.

Достаточность. Пусть G имеет ровно две вершины v и w нечетной степени. Добавим к G новое ребро {v, w}. Получим связный псевдограф G' со всеми вершинами четной степени. Тогда в графе G' существует эйлеров цикл. Исключив из этого цикла ребро {v, w}, получим эйлерову цепь , соединяющуя вершины v и w.

Замечание. Эйлерова цепь соединяет вершины нечетной степени. Вернемся к задаче о Кенигсбергских мостах. Необходимое условие существования эйлерова цикла или эйлеровой цепи выполняется, т.к граф связный. Найдем степени вершин графа: (v1) = (v2) = (v4) = 3, (v3) =5. Значит, граф не обладает ни эйлеровым циклом , ни эйлеровой цепью.

Познакомимся с алгоритмами выделения эйлерова цикла и эйлеровой цепи.

Алгоритм 1 выделения эйлерова цикла в связном мультиграфе G(V,X), где Х  и степени вершин четны..

  1. Выделить из G цикл 1. Положить k = 1 (k - число циклов), G' = G.

  2. Удалить из G' ребра, принадлежащие множеству Х(k). Полученный псевдограф снова обозначить G'. Если в G' отсутствуют ребра, то переходим к шагу 4. В противном случае выделяем из G' цикл k+1 и перейти к шагу 3.

  3. Присвоить k: = k + 1 и перейти к шагу 2.

  4. По построению 1 , …, k – циклы. Если k = 1, то 1 – искомый эйлеров цикл, работа алгоритма заканчивается. В противном случае находим цикл i такой, что V(i)  V(1) , где 2  i  k. Перейти к шагу 5.

  5. Присвоить к: = i – 1, 1 : 1 + i , j : j+1 , j = I, …, k. Перейти к шагу 4.

Применим этот алгоритм для выделения эйлерового цикла для псевдографа с четными степенями вершин..

Удалим из G петли. Получим связный мультиграф G’, степени которого четны. Пусть в G’ имеется хотя бы одно ребро. Тогда, применяя к G' приведенный алгоритм, найдем эйлеров цикл в графе G'. Добавляем в этот цикл удаленные петли, получим эйлеров цикл в G.

Рассмотрим теперь применения этого алгоритма для выделения эйлеровой цепи в связном псевдографе, имеящим ровно две вершины v, w нечетной степени., где Х . Добавляя к G ребро {v, w}, получим псевдограф G' с четными степенями вершин. Выделив в G' эйлеров цикл и удалив из него ребро {v, w} , получим эйлерову цепь.

Алгоритм 2 выделения эйлерова цикла в связном мультиграфе G(V,X), где Х  и степени вершин четны.

  1. Выбрать произвольно некоторую вершину v.

  2. Выбрать произвольно некоторое ребро х, инцидентное v , и присвоить ему номер 1.

  3. Каждое пройденное ребро вычеркивать и присваивать ему номер, на единицу больший номера предыдущего вычеркнутого ребра.

  4. Находясь в вершине vi , не выбирать ребра, соединяющего vi с v, если есть возможность другого выбора.

  5. Находясь в вершине vi , не выбирать ребра, которое является мостом (при удалении которого граф, образованный незачеркнутыми ребрами, распадается на две компоненты связности, имеющие хотя бы по одному ребру).

  6. После того, как в графе будут занумерованы все ребра, цикл , образованный ребрами с номерами от 1 до n, где n – число ребер в графе, есть эйлеров цикл.

Для использования этого алгоритма для построения эйлеровой цепи первый пункт будет таким: выбрать вершину с нечетной степенью. Остальные шаги не изменятся.

Пример. Построить эйлеров цикл, используя оба алгоритма.

Применим первый алгоритм.

Данный псевдограф - связный. Найдем степени вершин: (v1) = 4, (v2) = 4, (v3) = 6, (v4) = 4, (v5) = 4. Все степени вершин четные, следовательно, граф обладает эйлеровым циклом. Построим его.

Используем первый алгоритм.

Удалим петли х10 и х11. Получим мультиграф. Выделим цикл v3x4x2x5v3 – обозначим 1. Удалим ребра x4, x2, x5 . Снова выделяем цикл v3x3x1x6v3 - 2 . V(1)V(2) = {v1, v2, v3}. Удалим ребра. Выделяем цикл v3x7x9x8v3 - 3. V(2)V(3) = {v3}. В мультиграфе построили эйлеров цикл 1 + 2 + 3 . Добавим удаленные петли и получим цикл в заданном графе: v3x4x2x5 x3x1x6 x7 x10 x9 x11 x8v3.

Используем второй алгоритм.

Как и в первом алгоритме, удалим петли , получим мультиграф. Выберем любую вершину, например, v3. Выберем инцидентное ей ребро, например, х7 . Присвоим ему номер 1, т.е. х71 и вычеркнем. Выбираем инцидентное ребро вершине v4 – это ребро х9, присвоим ему номер 2 – х92 , вычеркнем. Выбираем инцидентное ребро вершине v5 – это ребро х8, присвоим ему номер 3 – х83 , вычеркнем. Далее аналогичным образом выбираем ребра х4, х2, х5 и х3, х1, х6. В мультиграфе эйлеров цикл построен. Добавим в него удаленные петли. Окончательно получим эйлеров цикл в данном графе: v3x7x10x9 x11x8x4 x2 x5 x3 x1 x6v3.