Нижегородский государственный университет им. Н.И.Лобачевского
Опубликован: 27.09.2006 | Доступ: свободный | Студентов: 3534 / 125 | Оценка: 4.44 / 4.11 | Длительность: 13:45:00
Специальности: Программист, Математик
Лекция 12:

Паросочетания

Паросочетания в двудольных графах

Пусть G=(A,B,E) - двудольный граф c долями A и B, M - паросочетание в G. Всякий увеличивающий путь, если такой имеется, соединяет вершину из множества A с вершиной из множества B.

Зафиксируем некоторую свободную вершину a\in A. Мы хотим найти увеличивающий путь, начинающийся в a, либо убедиться в том, что таких путей нет. Оказывается, нет необходимости рассматривать все чередующиеся пути, начинающиеся в вершине a, для того, чтобы установить, какие вершины достижимы из вершины a чередующимися путями.

Вершину x назовем четной или нечетной в зависимости от того, четно или нечетно расстояние между нею и вершиной a. Поскольку граф двудольный, любой путь, соединяющий вершину a с четной (нечетной) вершиной, имеет четную (нечетную) длину. Поэтому в чередующемся пути, ведущем из вершины a в четную (нечетную) вершину, последнее ребро обязательно сильное (слабое).

Определим дерево достижимости как максимальное дерево с корнем a, в котором каждый путь, начинающийся в корне, является чередующимся. Дерево достижимости определено не однозначно, но любое такое дерево в двудольном графе обладает следующим свойством:

Лемма 1. Вершина x принадлежит дереву достижимости тогда и только тогда, когда существует чередующийся путь, соединяющий вершины a и x.

Доказательство. Рассмотрим некоторое дерево достижимости T и докажем, что всякая вершина x, достижимая из вершины a чередующимся путем, принадлежит этому дереву. Проведем индукцию по длине кратчайшего чередующегося пути из a в x. Пусть y - предпоследняя (т.е. предшествующая x ) вершина такого пути. По предположению индукции, вершина y принадлежит дереву T. Если она четная, то любой чередующийся путь из вершины a в вершину y заканчивается сильным ребром. Следовательно, в дереве T вершину y c ее отцом соединяет сильное ребро, а ребро (x,y) - слабое. Поэтому, если добавить к дереву вершину x и ребро (x,y), то путь в дереве, соединяющий a с x, будет чередующимся. Значит, если предположить, что дерево T не содержит вершины x, то окажется, что оно не максимально, а это противоречит определению. Аналогично рассматривается случай, когда вершина y - нечетная.

Итак, для решения задачи остается научиться строить дерево достижимости. Для этого можно использовать слегка модифицированный поиск в ширину из вершины a. Отличие от стандартного поиска в ширину состоит в том, что открываемые вершины делятся на четные и нечетные. Для четных вершин исследуются инцидентные им слабые ребра, а для нечетных - сильные. Через V(x), как обычно, обозначается множество вершин, смежных с вершиной x, Q - очередь, используемая при поиске в ширину. Если вершина x не является свободной, т.е. инцидентна некоторому сильному ребру, то другая вершина этого ребра обозначается через p(x).

Петр Петров
Петр Петров

произведение графов К(2)*О(4) фактически 4 отдельных графа К(2)?

Александр Лаврентьев
Александр Лаврентьев

много инструкций вида if - then - else

Например Procedure DFS(a) опишите каким образом следует понимать вложенность инструкций. Как в языке С ? 

т.е. следующее 

if (...) then (...)

if (...) then (...)

else(...)

 

раскрывается как 

if (...) then (...)

if (...) then (...)

         else(...)

или так :

if (...) then

 {  (...)

     if (...) then (...)

              else(...)

}

обьясните пожалуйста.

 

 

Дмитрий Крюков
Дмитрий Крюков
Россия, Москва
Андрей Посохов
Андрей Посохов
Россия, Санкт-Петербург