【转】棋盘覆盖问题-分治法

转自:https://blog.csdn.net/qq_30268545/article/details/80600064

什么是棋盘覆盖方法?

    我去找其他人的解释,恰恰发现一个矛盾的地方,就是看解释比较难理解,但是看解决棋盘覆盖的过程,就很容易理解什么是棋盘覆盖问题了。所以这里就不解释了,直接给一个解决16*16的棋盘解决过程,看完过程,相信你也理解了什么是棋盘问题了。

    如下:

首先给出一个包含一个奇异点的16*16棋盘:

第一步是将该棋盘分为四个等大的子棋盘:

然后将该棋盘看做是4*4的棋盘,可以看到奇异点在左上角的子棋盘中,那么这一步的任务就是用一个(真的是一个)L型的棋子(下图中红色的格子)将其他三个子棋盘构造成含奇异点的子棋盘:

下一步是将红线分割的子棋盘又切割成四个子棋盘(白色线切开的子棋盘):

然后对每个红色线包围在里面的子棋盘,用一个L型棋子(黄色)又构造出奇异点,使得每个子棋盘都有一个奇异点,即白色线围起来的格子看做是一个整体,里面包含一个黄色的奇异点:

下一步是继续讲白色线包围的格子切分为4个子棋盘,这里为了方便观察,将前面所有的分割线去掉:

同理,对黄色的棋盘构造含奇异点的子棋盘(蓝色):

最后可以分割到2*2的格子,然后每个2*2的子棋盘都已经包含一个奇异点了,剩下的就是用L型旗子去填好剩下的三个格子。

好了,任务完成。是不是觉得很简单呢,觉得简单的话就点个赞呗。

具体的实现代码,请参考我的另外博客。棋盘覆盖-分治法(代码实现)
————————————————
版权声明:本文为CSDN博主「JoJonny」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_30268545/article/details/80600064

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章