写此博文目的:
1.刚学了棋盘覆盖问题,自己实现它,加深自己的理解很感悟
2.给为棋盘问题困惑的朋友带来一点思路
开始分析!
什么叫做分治法呢?
:简单来说就是分而治之,先把问题分解成很多个小问题,然后再处理它
棋盘覆盖问题就是一个很经典的分治问题
首先我们先来看一下棋盘覆盖问题到底是个什么问题?
题目引用自:https://blog.csdn.net/acm_jl/article/details/50938164
思路分析:
将一个大的棋盘划分为相同大小的四块,在这四块相同大小的子棋盘中,现在只有一个子棋盘有一个格子是不可覆盖的,还有三个子棋盘是所有的格子都是可以覆盖的,所以我们需要为这3个不存在不可覆盖格子的子棋盘构造3个不可覆盖的格子,那么我们应该如何构造呢?
下面我们看一张图:
假如现在第一个不可覆盖的格子在左上角,那么我们需要构造的3个不可覆盖的格子就跟上面的图一样,构造的这3个不可覆盖的格子的连接成的形状肯定是个L型,只是会随着棋盘中不可覆盖的格子的位置的不同而L型的开口方向会有所变化
总结一下:
将2k∗2k2k∗2k的棋盘划分为2k−1∗2k−12k−1∗2k−1这样的子棋盘4块。递归填充各个格子,填充分为四个情况,归出口为s=0,s=0也就是子棋盘方格数为1。
递归的四种情况:<