Лабораторная работа 4 ОТКДС (553864), страница 3
Текст из файла (страница 3)
Для нахождения Эйлеровой линии на графе удобнее воспользоваться следующим алгоритмом (рассматривается неориентированный граф):
0. Задается начальный шаг итерации k =0. Проверяется условие существования Эйлерова пути. Задается начальная (она же и конечная) вершина Эйлерова пути V0 . Если, например, V0 = A3, то это означает, что начальной вершиной Эйлерова пути на шаге k = 0 выбрана третья вершина графа.
1. k=k+1. Определяются все вершины, непосредственно связанные непомеченными ребрами с вершиной Vk-1.
2. Определяется число Sk этих непомеченных ребер. Если Sk= 1, то вторая вершина, инцидентная этому ребру, становится очередной вершиной Vk Эйлерова пути, и это ребро помечается. Возвращаемся на п. 1.
При Sk >1, среди вершин, смежных Vk-1, выбирается вершина с наименьшим номером k, которая становится очередной вершиной Vk Эйлерова пути. Ребро, соединяющее эту вершину с вершиной Vk-1, помечается. Возвращаемся на п. 1.
При Sk = 0, для каждой, уже найденной вершины, принадлежащей Эйлеровому пути и имеющей непомеченные инцидентные ребра, строится цикл по этим ребрам. Определение каждой вершины этого цикла начинается с п. 1.
Каждый построенный таким образом цикл объединяется с ранее построенными, и они образуют Эйлерову линию.
Отметим, что выбор вершины с наименьшим номером нужен для того, чтобы была определенность при выборе вершины на каждом шаге. Можно, однако, предложить выбор вершин и с наибольшим номером.
В качестве примера рассмотрим задачу нахождения Эйлеровой линии для графа (рис. 4.3) с начальной вершиной 3.
0. k = 0. Эйлерова линия существует, так как степени всех вершин четные. Выберем начальную вершину номер 3, т.е. V0 = 3. Число непомеченных ребер n = 11.
1. k = 1. С вершиной 3 связаны вершины 1, 2.
2. S1 = 2. Следующей вершиной Эйлерова пути является вершина 1. Ребро 3-1 помечается. Возвращаемся к 1.
1. k = 2. С вершиной 1 связаны вершины 2, 4, 6.
2. S2 = 3. Вершина 2. Помечается ребро 1-2. Возвращаемся к 1.
1. k = 3. С вершиной 2 связаны вершины 3, 5, 7.
Рис. 4.3
2. S3 = 3. Вершина 3. Помечается ребро 2-3. Возвращаемся к 1.
1. k = 4. С вершиной 3 связаны вершины 1, 2.
2. S4 = 0. Вершин таких нет. Следовательно, получен цикл 3-1-2-3, который еще не является Эйлеровой линией.
Вершины 1 и 2, входящие в этот цикл, имеют непомеченные инцидентные ребра. Рассмотрим вершину 1 в качестве начальной точки следущего цикла A4 = 1.
1. k = 5. Вершины 4, 6.
2. S5 = 2. Вершина 4. Ребро 1-4.
1. k = 6. Вершина 5.
2. S6 = 1. Вершина 5. Ребро 4-5.
1. k = 7. Вершины 2, 7, 8.
2. S7 = 3. Вершина 2. Ребро 5-2.
1. k = 8. Вершина 7.
2. S8 = 1. Вершина 7. Ребро 2-7.
1. k = 9. Вершины 5, 6, 8.
2. S9= 3. Вершина 5. Ребро 7-5.
1. k = 10. Вершина 8.
2. S10 = 1. Вершина 8. Ребро 5-8.
1. k = 11. Вершина 7.
2. S11 = 1. Вершина 7. Ребро 8-7.
1. k = 12. Вершина 6.
2. S12 = 1. Вершина 6. Ребро 7-6.
1. k = 13. Вершина 1.
2. S13 = 1. Вершина 1. Ребро 6-1.
1. k = 14. Вершин, связанных непомеченными ребрами, нет.
2. S14 = 0. В найденных циклах нет вершин, имеющих инцидентные непомеченные ребра. Следовательно, работа алгоритма заканчивается и для нахождения Эйлеровой линии необходимо объединить два найденных цикла 3-1-2-3 и 1-4-5-2-7-5-8-7-6-1 в вершине_1. Результатом объединения будет Эйлерова линия 3-1-4-5-2-7-5-8-7-6-1-2-3.
Контрольные вопросы
1. Как определить по матрице смежности начальные и конечные вершины графа?
2. Какое максимальное число классов эквивалентности может быть в графе?
3. Чему равно число Гамильтоновых путей в насыщенном графе?
4. Что такое связный граф?
5. Как по матрице смежности неориентированного графа определить существование Эйлерова пути?
6. Во всяком ли связном графе существует Эйлеров путь?