解题思路:这一题使用递归的解法比较便于理解,这里可以采用前面使用过的分治算法,将整个棋盘分成四个部分。直接划分后只有一个部分会有黑色图块,而其余三个部分则都是白色图块。这里可以采取人为添加的方式。在其余三个部分增加一个骨牌覆盖到三个部分,这样每个区块又都会包含黑色图块,然后分部分继续求解。递归的返回条件则是划分的图块只有一块时,直接返回即可。注意学习题目的递归思想。
题目大意:
棋盘覆盖问题要求在2^k * 2^k 个方格组成的棋盘中,你给定任意一个特殊点,用一种方案实现对除该特殊点的棋盘实现全覆盖。
建立模型如图:
解决方案就是利用分治法,将方形棋盘分成4部分,如果该特殊点在某一部分,我们就去递归他,如果不在某一部分,我们假设一个点为特殊点,同样递归下去,知道全覆盖。
左上角的子棋盘(若不存在特殊方格):则将该子棋盘右下角的那个方格假设为特殊方格;
右上角的子棋盘(若不存在特殊方格):则将该子棋盘左下角的那个方格假设为特殊方格;
左下角的子棋盘(若不存在特殊方格):则将该子棋盘右上角的那个方格假设为特殊方格;
右下角的子棋盘(若不存在特殊方格):则将该子棋盘左上角的那个方格假设为特殊方格;
#include<cstdio>
#includ