分治法之棋盘覆盖问题

本文通过实例分析棋盘覆盖问题,利用分治法将大问题拆解为小问题解决。详细介绍了四种递归情况,并给出了代码实现,旨在帮助读者深入理解分治策略。
摘要由CSDN通过智能技术生成

写此博文目的:

1.刚学了棋盘覆盖问题,自己实现它,加深自己的理解很感悟

2.给为棋盘问题困惑的朋友带来一点思路

 

开始分析!

 

什么叫做分治法呢?

:简单来说就是分而治之,先把问题分解成很多个小问题,然后再处理它

棋盘覆盖问题就是一个很经典的分治问题

首先我们先来看一下棋盘覆盖问题到底是个什么问题?

题目引用自:https://blog.csdn.net/acm_jl/article/details/50938164

思路分析:

将一个大的棋盘划分为相同大小的四块,在这四块相同大小的子棋盘中,现在只有一个子棋盘有一个格子是不可覆盖的,还有三个子棋盘是所有的格子都是可以覆盖的,所以我们需要为这3个不存在不可覆盖格子的子棋盘构造3个不可覆盖的格子,那么我们应该如何构造呢?

下面我们看一张图:

假如现在第一个不可覆盖的格子在左上角,那么我们需要构造的3个不可覆盖的格子就跟上面的图一样,构造的这3个不可覆盖的格子的连接成的形状肯定是个L型,只是会随着棋盘中不可覆盖的格子的位置的不同而L型的开口方向会有所变化

总结一下:

2k2k2k∗2k的棋盘划分为2k12k12k−1∗2k−1这样的子棋盘4块。递归填充各个格子,填充分为四个情况,归出口为s=0,s=0也就是子棋盘方格数为1。

递归的四种情况:<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值