Раскраска двудольного графа в два цвета
Содержание
Раскраска в 2 цвета
Теорема: |
Доказательство: |
Если множество вершин двудольного графа можно разделить на два независимых подмножества так, что ни одна из вершин ни в одном из этих подмножеств не является смежной к вершине из этого же подмножества, тогда граф Если же граф — -раскрашиваем. . -раскрашиваемый, то множество его вершин можно разделить на два непересекающихся множества так, чтобы в каждом из них не нашлось двух смежных вершин. Тогда граф будет двудольны. |
Теорема Кёнига
Теорема (Кёниг): |
Граф циклы в графе имеют чётную длину. является двудольным тогда и только тогда, когда все |
Доказательство: |
Рассмотрим двудольный граф. Начнем цикл в доле . Нужно пройти по четному числу ребер, чтобы вернуться в снова. Следовательно, при замыкании цикла число ребер будет четным. связен и не имеет циклов нечетной длины. Выберем произвольно вершину и разобьем множество всех вершин на два непересекающихся множества и так, чтобы в лежали вершины , такие что кратчайшая цепь была чётной длины, а в соответственно вершины , для которых длина цепи — нечётная. При этом . В графе Пусть ненулевой граф нет ребер , таких что лежат одновременно в и . Докажем это от противного. Пусть . Зададим — кратчайшая цепь, а — кратчайшая цепь. Обе цепи четной длины. Пусть — последняя вершина цепи , принадлежащая . Тогда подцепи от до в и имеют одинаковую длину (иначе бы, пройдя по более короткой подцепи от до мы смогли бы найти более короткую цепь от до или от до , чем цепь или ). Так как подцепи от до и от до в цепях и имеют одинаковую четность, а значит в сумме с ребром они образуют цикл нечётной длины, что невозможно. |
Следствие
Алгоритм проверки графа на двудольность, используя обход в глубину
Так как граф является двудольным тогда и только тогда, когда все циклы четны, определить двудольность можно за один проход в глубину. На каждом шаге обхода в глубину помечаем вершину. Допустим, мы пошли в первую вершину — помечаем её как . Затем просматриваем все смежные вершины, и если не помечена вершина, то на ней ставим пометку и рекурсивно переходим в нее. Если же она помечена и на ней стоит та же пометка, что и у той, из которой шли (в нашем случае ), значит граф не двудольный.
Алгоритм проверки графа на двудольность, используя обход в ширину
Произведём серию поисков в ширину. Т.е. будем запускать поиск в ширину из каждой непосещённой вершины. Ту вершину, из которой мы начинаем идти, мы помещаем в первую долю. В процессе поиска в ширину, если мы идём в какую-то новую вершину, то мы помещаем её в долю, отличную от доли текущей вершину. Если же мы пытаемся пройти по ребру в вершину, которая уже посещена, то мы проверяем, чтобы эта вершина и текущая вершина находились в разных долях. В противном случае граф двудольным не является. По окончании работы алгоритма мы либо обнаружим, что граф не двудолен, либо найдём разбиение вершин графа на две доли.
См. также
Источники информации
- Асанов М. О., Баранский В. А., Расин В. В. Дискретная математика: Графы, матроиды, алгоритмы.
- Харари Ф. Теория графов. /пер. с англ. — изд. 2-е — М.: Едиториал УРСС, 2003. — 296 с. — ISBN 5-354-00301-6
- Теорема Кёнига
- MAXimal :: algo :: Проверка графа на двудольность
- Обход в глубину. Реализации.
- Обход в ширину. Реализации.