Алгоритм вырезания соцветий
Паросочетание в недвудольном графе
Определение: |
Соцветие | графа - цикл, состоящий из ребер, из которых только входят в соцветие .
Определение: |
Cжатие соцветия - граф | , полученный из сжатием соцветия в одну псевдо-вершину.
Определение: |
База соцветия - вершина соцветия, в которую входит ребро не из данного соцветия. |
Теорема Эдмондса
Теорема: |
Пусть в графе существует соцветие .Тогда в существует удлиняющий путь тогда и только тогда, когда существует удлиняющий путь в |
Доказательство: |
Пусть граф
Пусть путь
Пусть путь Рассмотрим отдельно случай, когда Пусть теперь путь начинается со сжатого соцветия , т.е. имеет вид . Тогда в соцветии найдётся соответствующая вершина , которая связана ребром с . Заметим, что из базы соцветия всегда найдётся чередующийся путь чётной длины до вершины . Учитывая всё вышесказанное, получаем, что путь является увеличивающим путём в графе . проходит через псевдо-вершину , но не начинается и не заканчивается в ней. Тогда в есть два ребра, проходящих через , пусть это и . Одно из них обязательно должно принадлежать паросочетанию, однако, так как база цветка не насыщена, а все остальные вершины цикла цветка насыщены рёбрами цикла, то мы приходим к противоречию (это эквивалентно случаю отсутствия ребра из ). Таким образом, этот случай просто невозможен. Теорема доказана. в |
Алгоритм
Пусть дан произвольный граф
1) Ищем все соцветия и сжимаем их.
2) Ищем дополняющую в цепь в полученном графе обычным поиском в глубину.
3) "Разворачиваем" соцветия для восстановления цепи в исходном графе.