假设我们有一个位矩阵(至少包含一个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 的连续Blob ,其中每个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
这需要更多解释。矩阵中的“连续斑点”是什么?
—
NoOneIsHere
@Peter Taylor和esolangingfruit NP-Hardness
—
FantaC
如果
—
Colera Su
1
矩阵中不存在该怎么办?