Давайте представим, что у нас есть матрица битов (которая содержит хотя бы один 1
):
0 1 0 1 1 0 1 0 0 1 0
0 1 0 1 0 0 1 0 1 1 0
0 0 1 0 1 1 0 1 0 1 0
1 1 0 0 1 0 0 1 1 0 1
0 0 0 1 0 1 1 0 0 1 0
Мы хотим установить некоторые из битов в этой матрице так, чтобы она образовывала непрерывный двоичный объект 1
s, в котором каждый 1
прямо или косвенно связан друг с другом 1
посредством ортогонального движения:
0 1 1 1 1 1 1 0 0 1 0
0 1 0 1 0 0 1 0 1 1 0
0 1 1 0 1 1 1 1 0 1 0
1 1 0 0 1 0 0 1 1 1 1
0 0 0 1 1 1 1 0 0 1 0
(Вы можете увидеть это более четко, выполнив поиск 1
с помощью функции поиска в браузере.)
Однако мы также хотим минимизировать количество битов, которые мы устанавливаем.
Задание
Учитывая матрицу (или массив массивов) битов или логических значений, вернуть минимальное число битов, которое необходимо установить для создания непрерывного континента 1
s. Должна существовать возможность перехода от одного установленного бита в матрице к другому только путем перемещения в ортогональном направлении к другим установленным битам.
Это код-гольф , поэтому выигрывает самое короткое действительное представление (измеряется в байтах).
Тестовые случаи
0 1 0 1 1 0 1 0 0 1 0
0 1 0 1 0 0 1 0 1 1 0
0 0 1 0 1 1 0 1 0 1 0
1 1 0 0 1 0 0 1 1 0 1
0 0 0 1 0 1 1 0 0 1 0
=> 6
1 0 0 0 0 0 1 0 0
1 1 0 0 1 1 1 0 0
1 1 1 0 1 1 1 1 1
0 1 0 0 0 0 0 0 0
0 0 0 0 0 1 1 1 1
0 1 0 0 0 0 1 1 0
1 0 0 0 0 0 1 0 0
=> 4
0 0 0 1 1 1 0 1 1
0 0 1 0 0 0 0 1 0
0 0 1 1 1 1 1 1 0
1 1 0 0 1 1 0 0 0
0 0 1 1 1 0 0 1 1
0 1 1 1 0 0 0 0 0
1 1 1 0 0 1 1 1 0
1 1 1 0 1 1 0 1 1
0 0 0 0 1 0 0 0 1
1 1 0 0 1 1 0 1 1
0 0 0 0 0 0 0 1 0
0 1 1 1 1 0 0 0 0
0 0 0 1 1 0 0 0 1
0 1 0 0 1 0 1 1 0
0 1 1 1 0 0 0 0 1
=> 8
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
=> 0
1
в матрице нет?