Изменения

Перейти к: навигация, поиск

Эйлеровость графов

4753 байта добавлено, 19:18, 4 сентября 2022
м
rollbackEdits.php mass rollback
{{В разработке}}==Эйлеров обходОсновные определения==
{{Определение|definition=
'''Эйлеров обходЭйлеровым путем''' - обход графа, посещающий эйлеров (англ. ''Eulerian path'') в графе называется [[Основные определения теории графов|путь]], который проходит по каждому ребру, причем ровно один раз.
}}
==Эйлеров путь==
{{Определение|definition=
'''Эйлеровым путемЭйлеров обход''' в графе называется (англ. ''Eulerian circuit'') {{---}} обход графа, посещающий эйлеров путь, который проходит по каждому ребру, причем ровно один раз.
}}
==Эйлеров цикл==
{{Определение|definition=
'''Эйлеров цикл''' (англ. ''Eulerian cycle'') {{- --}} замкнутый эйлеров путь, который является циклом.
}}
==Эйлеров граф=={{Определение|id = euler_graph|definition=Граф называется '''эйлеровым'''(англ. ''Eulerian graph''), если он содержит эйлеров цикл. Граф, содержащий эйлеров путь, не являющийся циклом, называют называется '''полуэйлеровым''', если он содержит эйлеров путь, но не содержит эйлеров цикл.
}}
==Критерий эйлеровости==
Необходимое условия{{Теорема|id = eulerTheorem|statement=Для того, чтобы граф <tex>G = (V, E) </tex> был эйлеровым необходимо чтобы:1. Все вершины имели четную степень.
2. Все компоненты связности, кроме, может быть, одной, не содержали ребер.|proof=1. Количество Допустим в графе существует вершина с нечетной степенью. Рассмотрим эйлеров обход графа. Заметим, что при попадании в вершину и при выходе из нее мы уменьшаем ее степень на два (помечаем уже пройденые ребра), если эта вершина не является стартовой(она же конечная для цикла). Для стартовой(конечной) вершины мы уменьшаем ее степень на один в начале обхода эйлерова цикла, и на один при завершении. Следовательно вершин с нечетной степени степенью быть не превосходит двухможет. Наше предположение неверно.
2. Все Если в графе существует более одной компоненты связности кромес ребрами, может быть однойто очевидно, не имеют реберчто нельзя пройти по их ребрам одним путем.}}
[[Файл:not_eulerEuler_path_1.png|200px160px|thumb|centerleft| Эйлерова пути нет. <br>Количество вершин нечетной степени больше двух.]][[Файл:not_euler2Euler_path_2.png|200px230px|thumb|centernone| Две компоненты связности, одна имеет ребра.]]
{{Теорема
1. Все вершины имеют четную степень.
2. Все компоненты связности , кроме, может быть , одной, не имеют содержат ребер.
|proof=
 
Необходимость мы доказали ранее. Докажем достаточность, используя индукцию по числу вершин <tex>n</tex>.
 
База индукции: <tex>n = 0</tex> цикл существует.
При <tex>k = n</tex> доказано.
Рассмотрим граф <tex>G = (V, E) </tex> в котором количество вершин с четной степенью больше нуля. Рассмотрим произвольную вершину <tex>u</tex>. Из нее выходит ребро. Пойдем по нему и будем действовать далее также. Таким образом можно дойти до <tex>u</tex> и найти цикл. Выкинем ребра цикла из графа. Первое условие сохранится. Второе может не выполниться.
}}
'''Следствие'''Предположим что граф имеющий менее <tex>n</tex> вершин содержит эйлеров цикл.
В графе Рассмотрим связный граф <tex>G = (V, E) </tex> существует эйлеров путь тогда и только тогдас <tex>n > 0</tex> вершинами, когда:степени которых четны.
1Пусть <tex>v_1</tex> и <tex>v_2</tex> {{---}} вершины графа. Количество вершин с нечетной степенью меньше или равно двумПоскольку граф связный, то существует путь из <tex>v_1</tex> в <tex>v_2</tex>. Степень <tex>v_2</tex> {{---}} чётная, значит существует неиспользованное ребро, по которому можно продолжить путь из <tex>v_2</tex>. Так как граф конечный, то путь, в конце концов, должен вернуться в <tex>v_1</tex>, следовательно мы получим замкнутый путь (цикл). Назовем этот цикл <tex>C_1</tex>. Будем продолжать строить <tex>C_1</tex> через <tex>v_1</tex> таким же образом, до тех пор, пока мы в очередной раз не сможем выйти из вершины <tex>v_1</tex>, то есть <tex>C_1</tex> будет покрывать все ребра, инцидентные <tex>v_1</tex>. Если <tex>C_1</tex> является эйлеровым циклом для <tex>G</tex>, тогда доказательство закончено. Если нет, то пусть <tex>G'</tex> {{---}} подграф графа <tex>G</tex>, полученный удалением всех рёбер, принадлежащих <tex>C_1</tex>. Поскольку <tex>C_1</tex> содержит чётное число рёбер, инцидентных каждой вершине, то каждая вершина подграфа <tex>G'</tex> имеет чётную степень. А так как <tex>C_1</tex> покрывает все ребра, инцидентные <tex>v_1</tex>, то граф <tex>G'</tex> будет состоять из нескольких компонент связности.
2Рассмотрим какую-либо компоненту связности <tex>G'</tex>. Все Поскольку рассматриваемая компонента связности <tex>G'</tex> имеет менее, чем <tex>n</tex> вершин, а у каждой вершины графа <tex>G'</tex> чётная степень, то у каждой компоненты связности кроме<tex>G'</tex> существует эйлеров цикл. Пусть для рассматриваемой компоненты связноти это цикл <tex>C_2</tex>. У <tex>C_1</tex> и <tex>C_2</tex> имеется общая вершина <tex>a</tex>, может быть однойтак как <tex>G</tex> cвязен. Теперь можно обойти эйлеров цикл, начиная его в вершине <tex>a</tex>, обойти <tex>C_1</tex> , вернуться в <tex>a</tex>, затем пройти <tex>C_2</tex> и вернуться в <tex>a</tex>. Если новый эйлеров цикл не является эйлеровым циклом для <tex>G</tex>, продолжаем использовать этот процесс, расширяя наш эйлеров цикл, пока, в конце концов, не имеют реберполучим эйлеров цикл для <tex>G</tex>'''Доказательство'''
}}
{{Теорема
|about=следствие
|statement=
В графе <tex>G = (V, E) </tex> существует эйлеров путь тогда и только тогда, когда:
1. Количество вершин с нечетной степенью меньше или равно двум.
2. Все компоненты связности кроме, может быть одной, не содержат ребер.
|proof=
Добавим ребро, соединяющее вершины с нечетной степенью. Теперь можно найти эйлеров цикл, после чего удалить добавленное ребро. Очевидно найденный цикл станет путем.
}}
====[[Основные определения теории графов|Ориентированный граф]]====
{{Теорема
|statement=
Ориентированный почти связный граф В ориентированном графе <tex>G = (V, E) </tex> является эйлеровым существует эйлеров цикл тогда и только тогда, когда входная : 1. Входная степень любой вершины равна ее выходной степени. 2. Все компоненты слабой связности кроме, может быть одной, не содержат ребер.
|proof=
Доказательство аналогично случаю неориентированного графа.
}}
{{Теорема|about=cледствие|statement=Алгоритм построения эйлерова циклаВ ориентированном графе <tex>G = (V, E)</tex> существует эйлеров путь если:1. Входная степень любой вершины равна ее выходной степени, кроме двух вершин графа, для одной из которых <tex>\operatorname{deg}^+ - \operatorname{deg}^- = 1</tex>, эйлерова путиа для другой <tex>\operatorname{deg}^+ - \operatorname{deg}^- =-1</tex>.2. Все компоненты слабой связности кроме, может быть одной, не содержат ребер.|proof=Соединим ориентированным ребром вершину с большей входящей степенью с вершиной с большей исходящей степенью. Теперь можно найти эйлеров цикл, после чего удалить добавленное ребро. Очевидно найденный цикл станет путем.}}
Запускаем алгоритм от вершины <tex>v</tex>.Алгоритм будет корректно работать, когда в графе существует эйлеров цикл, то есть степени всех вершин четны==См.также==
procedure FindEulerPath(v) перебираем все рёбра, выходящие из вершины v. каждое такое ребро удаляем из графа. вызываем FindEulerPath из второго конца этого ребра. добавляем вершину v в ответ. Сложность алгоритма <tex>O(VE)</tex>* [[Алгоритм построения Эйлерова цикла]]
В случае не существования эйлерова цикла, соединим вершины с нечетной степенью ребром, найдем эйлеров цикл, а затем удалим добавленное ребро из ответа.== Источники информации==
==Полезные ссылки== * Ф.Харари Теория графов. глава Глава 7. Обходы графов. Эйлеровы графы.* Уилсон Р. Введение в теорию графов. {{---}} М.: Мир, 1977
* [http://e-maxx.ru/algo/euler_path Нахождение эйлерова пути]
* [[Алгоритм построения Эйлерова цикла]]
[[Категория: Алгоритмы и структуры данных]]
[[Категория: Обходы графов]]
[[Категория: Эйлеровы графы]]
1632
правки

Навигация