Уявімо, у нас є матриця бітів (яка містить хоча б один 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
Ми хочемо встановити деякі біти в цій матриці таким чином, щоб вона утворювала суміжну крапку 1s, в якій кожен 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допомогою функції "знайти" у веб-переглядачі.)
Однак ми також хочемо мінімізувати кількість бітів, які ми встановили.
Завдання
Давши матрицю (або масив масивів) бітів або булів, поверніть мінімальну кількість бітів, яку потрібно встановити для створення суміжного континенту 1s. Потрібно бути можливим дістатись з одного набору бітів у матриці до іншого, лише рухаючись в ортогональному напрямку до інших заданих бітів.
Це код-гольф , тому виграє найкоротше дійсне подання (вимірюється в байтах).
Випробування
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в матриці немає?