缺角棋盘的覆盖算法 | CoverMissingConnerBoard Recursion Algorithm

1-24 缺角棋盘的覆盖算法 1 | CoverMissingConnerBoard Recursion Algorithm Primary

考察缺失右上角(面积为4n-1)的2n * 2n 的棋盘 (n>=1)

1. 证明,使用由三个1*1 L型正方形一定可以覆盖该类棋盘。

令 n 为该类棋盘的边长的阶次,我们不妨从最简单的情况入手,也即是

n == 1 的棋盘

显然一定是可以覆盖的

n>1 的棋盘

我们可以转换一下,使用递归的方向进行思考,即不妨所有 n < N 的棋盘都可以被L型棋盘覆盖,我们来考察n == N 的棋盘。
我们不妨将一块L型积木放到中心,缺口方向与棋盘方向保持一致
我们观察左右上下四块,是不是变成了 4 块 n-1 阶次的棋盘。由归纳假设,命题的证。

2. 试用算法解决该问题

我们尝试首先归纳出递归解法

  1. 如果 n == 1答案显然
  2. 如果 n != 则摆放一块L型木块在中间,问题变成两个 n-1问题,递归
    // cover 算法
    void cover(int n,int x,int y,int dx,int dy){
   
   
        
        // 子问题的阶次
        int s = 1 << (n-1);
        
        // 在中心放置一块缺口朝棋盘缺口的L型
        place(x + dx*(s-1),y + dy*(s-1),dx,dy);
        
        // 在问题 > 1 时 
        if (1 < n){
   
   
            
            // 正向缺口方向覆盖
            cover(n-1,x,y,dx,dy);
            
            // 逆向缺口方向覆盖
            cover(n-1,x + dx 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值