棋盘覆盖问题
1、问题描述
在一个2k x 2k ( 即:2^k x 2^k )个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。
2、解决思路
这道题可以用递归与分治的思想来解决,也就是把一个大的棋盘分成4个小棋盘,检索填充,然后在把小棋盘继续细分,直到棋盘中只包含一个格子为止。
3、核心代码
/**
* 棋盘覆盖函数
* @param tr:表示当前所在棋盘的左上角的行位置
* @param tc:表示当前所在棋盘的左上角的列位置
* @param dr:表示特殊棋盘的行位置
* @param dc:表示特殊体盘的列位置
* @param size:棋盘的长度
*/
public static void chessBoard(int tr,int tc,int dr,int dc,int size) {
//如果当前棋盘只有一个方格时ÿ