myf писал(а):
Скачал книгу Н.Кристофидиса "Теория графов". Нет там такого алгоритма. Там как и везде алгоритмы поиска максимального паросочетания (только одного, случайного).
Вы правы, я невнимательно посмотрел вопрос. Однако мне кажется, что поиск максимальных паросочетаний можно сделать направленным.
Предположим, что использованием хорошего алгоритма удалось найти первое максимальное паросочетание. Как найти еще одно максимальное паросочетание? Два максимальных паросочетания должны отличаться
хотя бы одним ребром. Скажем в первом паросочетании
ребер. Удалим
временно из исходного графа одно из ребер, принадлежащих найденному максимальному паросочетанию, и снова найдем максимальное паросочетание. Сравним полученное паросочетание с ранее найденным максимальным паросочетанием.
а) Если удалось получить максимальное паросочетание, то добавим его в список максимальных паросочетаний и из набора ребер
уже этого паросочетания временно удалим еще одно ребро и будем повторять эту процедуру поиска максимальных паросочетаний.
б) Если же данное паросочетание не является максимальным, то это означает, что удаленное ребро должно входить во
все максимальные паросочетания и его надо вернуть в граф и никогда больше не удалять, разыскивая другие максимальные паросочетания.
Вот, примерно, в этом и алгоритм, он явно конечен (временно удаляемые ребра) и по сути это алгоритм поиска по дереву в глубь с отсечениями. Однако, вполне возможно он не оптимален, но надеюсь приемлем.
Возможно, он такой же как предложил Егор, но я не понял его алгоритма.