Уявімо, у нас є матриця бітів (яка містить хоча б один 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
в матриці немає?