要获得矩阵中相邻1的最小翻转次数

问题描述 投票:14回答:2

给出一个二进制矩阵(值为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的数字,以便至少形成一个......>

algorithm graph-algorithm combinatorics np-hard
2个回答
1
投票

您的问题与rectilinear Steiner tree problem密切相关。

A Steiner tree使用线段将一组点连接在一起,从而使线段的总长度最小。线段可以在任意位置相遇,而不必在集合中的点相遇(因此与minimum spanning tree不同)。例如,给定等边三角形角处的三个点,欧氏Steiner树通过在中间相遇来连接它们:


-1
投票

[小山由1的四个序列组成:

© www.soinside.com 2019 - 2024. All rights reserved.