39
правок
Изменения
м
→Описание алгоритма
=== Описание алгоритма ===
* Начало* '''Шаг 0.''' Введем ''следующее понятие'':** Назовём потенциалом два произвольных массива чисел <tex> u[1 \ldots n] </tex> и <tex> v[1 \ldots n] </tex> таких, что выполняется условие: <tex> u[i] + v[j] \leqslant a[i][j] ~ (i = 1 \ldots n)</tex>, где <tex> a </tex> {{---}} заданная матрица* '''Шаг 1.''' Добавляем в рассмотрение очередную строку матрицы <tex> \mathtt{a} </tex>.* '''Шаг 2.''' Пока нет увеличивающей цепи, начинающейся в этой строке, пересчитываем потенциал.* '''Шаг 3.''' Как только появляется увеличивающая цепь, чередуем паросочетание вдоль неё (включая тем самым последнюю строку в паросочетание), и переходим к началу (к рассмотрению следующей строки).* Конец
=== Реализация ===