3

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

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

请参阅以下示例:

单击此处查看示例

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

4

1 回答 1

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 但颜色错误,同上。

如果候选人在这些测试中幸存下来(并且包含更改的方格,以防原来的棋盘上的棋子多于应有的棋子),则将其放置,并删除其中包含的方格。

于 2013-07-14T22:22:10.010 回答