给定二进制矩阵(值为0或1),相邻的1表示“山丘”。另外,给定一些数字k,则找到至少需要翻转0的最小数量,以形成大小为k的山丘。
编辑: 为了澄清,相邻表示左右上下邻居。 对角线不算作相邻。例如,
[0 1 0 1]
是大小为2的一个山丘,
[0 1 1 0]
定义了大小为1的2个山丘,
[0 1 1 1]
定义了大小为3的1个山丘,并且
[1 1 1 1]
定义了大小为4的1个山丘。
此外,澄清一下,大小由相邻的1组成的区域定义。
我的初始解决方案涉及将每个现有山丘转换为图的节点,并将代价设置为到每个其他节点的最小路径。然后,执行DFS(或类似的算法)以查找最小成本。
这在选择某些路径降低另一个边缘的成本的情况下失败,而解决这个问题的解决方案(我能想到的)与暴力解决方案过于接近。
[0 1 0 1]
是大小为2的一个山丘,
[0 1 1 0]
定义了大小为1的2个山丘,
[0 1 1 1]
定义了大小为3的1个山丘,并且
[1 1 1 1]
定义了大小为4的1个山丘。
此外,澄清一下,大小由相邻的1组成的区域定义。
我的初始解决方案涉及将每个现有山丘转换为图的节点,并将代价设置为到每个其他节点的最小路径。然后,执行DFS(或类似的算法)以查找最小成本。
这在选择某些路径降低另一个边缘的成本的情况下失败,而解决这个问题的解决方案(我能想到的)与暴力解决方案过于接近。
1
的1
(总共三个1
)有多少山丘和大小? - גלעד ברקן