ลองจินตนาการว่าเรามีเมทริกซ์ของบิต (ซึ่งมีอย่างน้อยหนึ่ง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
เมทริกซ์?