Hãy tưởng tượng chúng ta có một ma trận các bit (chứa ít nhất một 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
Chúng tôi muốn thiết lập một số bit trong ma trận này sao cho nó tạo thành một đốm liền kề của 1
s, trong đó mọi bit 1
được kết nối trực tiếp hoặc gián tiếp với nhau 1
thông qua chuyển động trực giao:
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
(Bạn có thể thấy rõ hơn điều này bằng cách tìm kiếm 1
với tính năng "tìm" của trình duyệt.)
Tuy nhiên, chúng tôi cũng muốn giảm thiểu số lượng bit mà chúng tôi đặt.
Nhiệm vụ
Đưa ra một ma trận (hoặc mảng các mảng) của bit hoặc booleans, trả về số lượng bit tối thiểu cần được đặt để tạo ra một lục địa liền kề của 1
s. Có thể lấy từ bit set này trong ma trận sang ma trận khác bằng cách chỉ di chuyển theo hướng trực giao với các bit set khác.
Đây là môn đánh gôn , vì vậy bài nộp hợp lệ ngắn nhất (tính bằng byte) sẽ thắng.
Các trường hợp thử nghiệm
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
trong ma trận?