Я пытаюсь реализовать Венгерский алгоритм, но я застрял на шаг 5. В принципе, учитывая матрицу чисел n X n
, как я могу найти минимальное количество вертикальных + горизонтальных линий, таких как нули в матрице?
Прежде чем кто-то отметит этот вопрос как дубликат этого, упомянутое решение неверно, а кто-то еще также столкнулся с ошибкой в размещенном там тексте.
Я не ищу код, а концепцию, с помощью которой я могу рисовать эти строки...
EDIT: Пожалуйста, не публикуйте простой (но неправильный) жадный алгоритм: Учитывая этот ввод:
(0, 1, 0, 1, 1)
(1, 1, 0, 1, 1)
(1, 0, 0, 0, 1)
(1, 1, 0, 1, 1)
(1, 0, 0, 1, 0)
Я выбираю, очевидно, столбец 2 (0-индексированный):
(0, 1, x, 1, 1)
(1, 1, x, 1, 1)
(1, 0, x, 0, 1)
(1, 1, x, 1, 1)
(1, 0, x, 1, 0)
Теперь я могу либо выбрать строку 2 или col 1, у которых есть два "оставшихся" нуля. Если я выберу col2, я получаю неправильное решение по этому пути:
(0, x, x, 1, 1)
(1, x, x, 1, 1)
(1, x, x, 0, 1)
(1, x, x, 1, 1)
(1, x, x, 1, 0)
Правильное решение использует 4 строки:
(x, x, x, x, x)
(1, 1, x, 1, 1)
(x, x, x, x, x)
(1, 1, x, 1, 1)
(x, x, x, x, x)