题目:Tromino 是一个由棋盘上的三个邻接方块组成的L型瓦片,我们的问题是,如何用tromino覆盖一个缺少了一个方块(可以在棋盘上的任何位置)的(2^n)*(2^N)棋盘。除了这个缺少的方块,tromino应该覆盖棋盘上的所有方块,而且不能重叠。
原题见《算法设计与分析基础》98页。
思想是使用分治法,即把大问题划分为几个小问题。8*8的化为4个4*4的,4*4的化为四个2*2的,当化为2*2的时候,解法就很简单了,直接把2*2矩阵中另外三个位置用L型瓦片覆盖就行了。当返回到上一层4*4矩阵的时候,把与刚才2*2矩阵相邻的三个位置用一块瓦片覆盖。因为瓦片占三个位置,恰好在剩下三个矩阵中每个占一个位置,然后又生成了另外三个2*2且每个都缺一个位置的问题。