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

本文通过实例详细解析了棋盘覆盖问题,展示了如何使用分治法解决16*16棋盘上的奇异点覆盖,逐步分解棋盘并利用L型棋子填充,最终实现完整覆盖。

转自:https://blog.youkuaiyun.com/qq_30268545/article/details/80600064

什么是棋盘覆盖方法?

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

    如下:

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

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

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

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

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

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值