80
правок
Изменения
м
→Корректность алгоритма
Обозначим как <tex>p'</tex> путь из <tex>s</tex> в <tex>t</tex> без первого и последнего ребра. Пусть он
является дополняющей цепью для исходного графа <tex>G</tex> и обратно - — т.е. любая дополняющая цепь графа <tex>G</tex> является путем <tex>p'</tex>. Тогда из [[Теорема о максимальном паросочетании и дополняющих цепях|теоремы]] — если мы на каждом шаге можем найти новый путь, т.е. находим новую дополняющую цепь, то мы увеличиваем текущее паросочетание. Если путь найти мы уже не можем, значит дополняющих цепей в графе нет и текущее паросочетание — искомое. Осталось доказать, что путь <tex>p'</tex> действительно является дополняющей цепью.
Т.к. <tex>p'</tex> — путь в двудольном графе, он нечетной длины, в котором вершины не повторяются (т.к. этот путь строится с помощью поиска в глубину). Рассмотрим текущее паросочетание. Мы записывали в него ребра из <tex>L</tex> в <tex>R</tex>, но после этого инвертировали их. Значит, ребра текущего паросочетания сейчас ведут из <tex>R</tex> в <tex>L</tex>. В таком случае ребра пути <tex>p'</tex> можно пронумеровать так, чтобы нечетные ребра были свободными, а четные — покрытыми (что соответствует текущему паросочетанию). Тогда этот путь — дополняющая цепь для графа <tex>G</tex>, и паросочетание можно перезаписать.