因此,例如,我已将地图分为以下内容: click on link
矩阵代表为
0 1 0 1 0
1 1 1 1 0
0 1 1 1 1
0 1 0 0 0
我可以将其划分为均匀的一种方法是: click to see
其中总平方为11,由于11/3为我们提供了一个小数,因此我需要2个4平方的空间和1个3平方的空间。
但是我不知道能够像这样分割小地图的算法。
可能有一个代码可以解析特定的地图,但是如果它是这样的话:
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 0 0
0 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 0 1
每个值是地图上的一个正方形,而1是应考虑的正方形。 0是一个空/空空间,不是地图的一部分,分割地图时不应将其考虑在内。
到目前为止,我尝试了一个for循环,将所有值相加并除以3,以确定每个空间需要多少个正方形。另外,如果我得到一个小数,那么一个空格可以比另一个空格多一个平方。因此,在这个问题中有36个正方形,因此,如果我尝试将其划分为3个空间,则每个空间将有12个正方形。
所以我想看看是否有一种算法能够解决所有类型的地图。
答案 0 :(得分:1)
对于k> = 2,这实际上是NP-hard,您想要k = 3或k = 4:
通过贪婪地从图中删除节点,然后回溯(如果无法合并其余节点),可以得到不错的答案。
如果您对“偶数”进行更严格的定义会有所帮助-例如,考虑一个包含13个节点的地图-您是否希望划分大小为(4,4,5),(3,3, 3,4),(4,4,4,1),(5,5,3)或(4,4,3,2)?