不算作相邻。例如,给出一个二进制矩阵(值为0或1),相邻的1表示“ hills”。同样,给定一些数字
k
,找到您需要“翻转”到1以形成至少大小为k
的小山的最小0。编辑:为清楚起见,相邻表示左-右-上-下-邻域。对角线not
[0 1
0 1]
是一座山,大小为2,
[0 1
1 0]
定义2个大小为1的山丘,
[0 1
1 1]
定义大小为3的1个山丘,然后
[1 1
1 1]
[定义1个大小为4的山丘。
另外,为澄清起见,大小由相邻的1的斑点形成的面积定义。
我最初的解决方案与将每个现有的山转换为图的节点有关,而代价是到其他节点的最小路径。然后,执行DFS(或类似算法)以找到最低成本。
[如果选择某些路径降低了另一条边的成本,而与之抗衡的解决方案(我能想到的)太接近于蛮力解决方案,这将失败。
给出一个二进制矩阵(值为0或1),相邻的1表示“ hills”。同样,给定一些数字k,找到需要最小翻转为0的数字,以便至少形成一个......>
您的问题与rectilinear Steiner tree problem密切相关。
A Steiner tree使用线段将一组点连接在一起,从而使线段的总长度最小。线段可以在任意位置相遇,而不必在集合中的点相遇(因此与minimum spanning tree不同)。例如,给定等边三角形角处的三个点,欧氏Steiner树通过在中间相遇来连接它们:
[小山由1
的四个序列组成: