棋盘覆盖

[复制链接]
发表于 2024-1-2 17:18:25 | 显示全部楼层 |阅读模式

【问题描述】在一个2k×2k 方格组成的棋盘中,若恰有一个方格与其他方格不同,则称该方格为一特殊方格,且称该棋盘为一特殊棋盘。现在要用以下4种不同形态的L形骨牌覆盖一个给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。求一种覆盖方法。

4种L形骨牌特殊棋盘,不能把骨牌放在黑色方格上面。
【分析】尺寸为2k×2k,我们可以想到将其分割成四个尺寸为2k-1×2k-1的子棋盘。
接下来,将L型放置在棋盘的正中央,使四个子棋盘都变成特殊棋盘(一个子棋盘含有特殊方格,另外三个子棋盘恰好被骨牌覆盖,如下图)。此时问题也变成了四个相同的子问题,只需简单地对四小块区域进行递归,就可以解决这道问题了。
“L”型骨牌
代码的时间复杂度和空间复杂度都是O(4k)。由于覆盖一个2k×2k 棋盘所需的L型骨牌个数为(4k-1)/3,所以算法已经是最优的了。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表