
- •20 Лекция №19.Гамильтоновы и эйлеровы графы
- •20.1 Ключевые вопросы
- •20.2 Текст лекции
- •20.2.1 Обходы графа
- •20.2.2 Степени вершин
- •20.2.3 Гамильтоновы и эйлеровы графы
- •20.2.4 Вопросы для контроля к п. 20.2.1…20.2.3
- •20.2.5 Эйлеровы графы
- •1. Алгоритм построения эйлерова цикла
- •2. Алгоритм построения эйлеровой цепи
- •3. Модифицированный алгоритм построения эйлерова цикла
- •4. Покрытие графа непересекающимися по ребрам цепями
- •20.2.6Вопросы для контроля к п. 20.2.5
1. Алгоритм построения эйлерова цикла
Предполагается, что граф связен и удовлетворяет условиям Эйлера. Все ребра графа не имеют индексов.
Положить i = 1. Построить простой цикл с началом в некоторой вершине w (в первый раз это будет вершинаvнач).
Примечание.В простом цикле вершины не повторяются.
Всем ребрам построенного цикла присвоить индекс i. Если ребер без индекса больше нет, то к п. 4 , иначе к п. 3.
Положить i = i + 1, среди ребер без индекса выбрать ребро, смежное одному из ребер с индексом. Построить простой цикл из еще не помеченных ребер, содержащий выбранное ребро, и перейти к п. 2.
Строим эйлеров цикл с началом в vначпоследовательным обходом ребер графа. На каждом шаге выбираем ребро с наибольшим индексом. Если таких ребер несколько, то берем любое из них.
2. Алгоритм построения эйлеровой цепи
Если требуется построить эйлерову цепь, то
Сначала строится простая цепь между вершинами с нечетными степенями. ее ребрам присваиваются индексыi= 1.
Если ребер без индекса больше нет, то к п. 4 , иначе к п. 3.
Положить i = i + 1, среди ребер без индекса выбрать ребро, смежное одному из ребер с индексом. Построить простой цикл из еще не помеченных ребер, содержащий выбранное ребро, присвоить ребрам этого цикла индекс i и перейти к п. 2.
Строим эйлеров цикл с началом в vначпоследовательным обходом ребер графа. На каждом шаге выбираем ребро с наибольшим индексом. Если таких ребер несколько, то берем любое из них.
3. Модифицированный алгоритм построения эйлерова цикла
Практика построения эйлеровых циклов показывает, что в процессе получения простых циклов случайным блужданием при некоторых вершинах образуются частные циклы, которые приходится временно отбрасывать. Чтобы этого не делать, модифицируем алгоритм построения эйлерова цикла (цепи) следующим образом.
циклы, которые мы пытаемся построить, назовем основными. Циклы, которые возникают при некоторых вершинах в процессе построения основных, назовем частными.
Введем две переменные iи j.Вiбудем подсчитывать общее количество циклов, вj число частных циклов, появляющихся при построении одного основного цикла.
Полагаем i = 1 иj= 1.
Случайным блужданием из ребер без индексов строим основной цикл с началом в некоторой вершине w (в первый раз это будет вершинаvнач).
Если в процессе построения основного цикла возникает частный цикл при какой–либо вершине, то ребрам этого цикла присваиваем индексы in=i+ jи полагаемj=j+ 1.
Продолжаем строить начатый основной цикл. Если частный цикл не образуется, то к п. 5, иначе к п. 3.
После завершения строительства основного цикла, т.е. когда мы вернемся в вершину w, его ребрам присвоим индексыin=iи изменим значенияiиj:i=i+ j, j = 1.
Если ребер без индекса больше нет, то к п. 8, иначе к п. 7.
Среди оставшихся ребер без индексов выбираем ребро, инцидентное одной из вершин ранее построенного цикла (построенных циклов), пусть это будет вершина w, и к п. 2.
Строим эйлеров цикл с началом в vначпоследовательным обходом ребер графа. На каждом шаге выбираем ребро с наибольшим индексом. Если таких ребер несколько, то берем любое из них.
Аналогично изменяется и алгоритм построения эйлеровой цепи.