方形瓷砖合并算法

时间:2013-07-14 21:47:26

标签: algorithm tiles

我有一个8x8方板,可以有不同颜色的SQUARE瓷砖的任意组合。这些方形瓷砖可以有不同的尺寸,我们可以有1到8的边的正方形,由于板的尺寸,8是最大值。

我需要找到一种算法,允许我用与区域本身一样大的方形图块替换相同颜色的方形区域。

请参阅以下示例:

Click here to see an example

在这些示例中,我们将标有“x”的图块的颜色更改为黄色,以获得更大的方形黄色区域。我正在寻找一种算法,它将用与区域本身相同大小的相应区块替换大的黄色方形区域(步骤C)。也许算法可以从我们改变颜色(用'x'标记的那个)的颜色的区块开始检查相邻的区块。

1 个答案:

答案 0 :(得分:2)

有了这么小的板子,也许我们可以使用蛮力。按照大小的降序迭代可能的正方形。

for (int width = 8; width > 0; width--) {
    for (int x0 = 0; x0 <= 8 - width; x0++) {
        for (int y0 = 0; y0 <= 8 - width; y0++) {
            int x1 = x0 + width;
            int y1 = y0 + width;
            ...
        }
    }
}

对于每个现有的平方S,测试候选平方[x0, x1] * [y0, y1]是否与S相交,如果是,则是否包含S.如果S相交但未包含,则[x0, x1] * [y0, y1]不是可能的替换。如果含有S但颜色错误,同上。

如果候选人在这些测试中幸存下来(并且包含更改的方块,以防原始板具有比它应该更多的瓦片),则放置它,并且它包含的方块将被删除。