棋盘覆盖问题:在一个2^k×2^k(k≥0)个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为特殊方格。显然,特殊方格在棋盘中可能出现的位置有4^k种,因而有4^k种不同的棋盘。棋盘覆盖问题要求用4种不同形状的L型骨牌覆盖给定棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。如图:以4*4的棋盘为例:
四种不同形状的L型骨牌:
骨牌覆盖的结果:
棋盘填充的实现:
//分治回溯 分治的应用 之 棋盘覆盖问题
/*
利用分治算法 将棋盘分成三个子棋盘
首先要先判断特殊方格在哪个子棋盘中
若特殊方格在左上子棋盘中 就继续向下递归 将子棋盘再分为四个子棋盘即可
若左上子棋盘中没有特殊方格 我们就将左上子棋盘中的右下方的格子 当成一个特殊方格
再继续向下递归 将子棋盘再分为四个子棋盘 直到棋盘被全部覆为止
若右上子棋盘中没有特殊方格 我们就将右上子棋盘中的左下方的格子 当成一个特殊方格
再继续向下递归 将子棋盘再分为四个子棋盘 直到棋盘被全部覆为止
若左下子棋盘中没有特殊方格 我们就将下上子棋盘中的右上方的格子 当成一个特殊方格
再