• 递归学习:棋盘拼接


    题目:一块不完整的棋盘(就是某个地方缺了一个格子)一及y一块用于修补它的L形砖。

      讲棋盘分个割成四个正方形,有三个正方形是跟原来的一样,只有一个是缺了一个角的,但是在其他三个的交界处可以去掉一个L形砖,这样问题就跟原问题一样了,继续这样下去,化成一个个的子问题,把每个子问题解决了,再和其他就是原问题的解。

      代码如下:

     1 def cover(board,lab=1,top=0,left=0,side=None):
     2     if side is None:
     3         side=len(board)
     4     s=side//2# firstly s is  equal to four 
     5     offset=(0,-1),(side-1,0)
     6     for dy_outer,dy_inner in offset:
     7         for dx_outer,dx_inner in offset:
     8             if not board[top+dy_outer][left+dx_outer]:
     9                 board[top+s+dy_inner][left+s+dx_inner]=lab
    10     if s>1:
    11         for dy in [0,s]:
    12             for dx in [0,s]:
    13                 lab=cover(board,lab,top+dy,left+dx,s)
    14 
    15     return lab
    16                         
    17 board=[[0]*8 for i in range(8)]
    18 board[7][7]=-1
    19 cover(board)
    20 for row in board:
    21     print ((" %2i"*8) % tuple(row))

    其中比较有趣的就是

    offset=(0,-1),(side-1,0)
        for dy_outer,dy_inner in offset:
            for dx_outer,dx_inner in offset:

    每次的 x,y=(side,side)都不会处理其所在规模的正方形的对角。而且用了一个点[s,s]来定了一个L形砖的拼接。

    整副棋盘由大化小。

  • 相关阅读:
    React Native区分安卓/iOS平台
    yarn命令使用
    React 源码剖析系列 - 不可思议的 react diff
    dangerouslySetInnerHTMl
    iOS12下APP进入后台后再返回前台连接断开
    AttributedString-富文本字符串
    Bundle创建与使用
    UIButton-详解
    实战项目-百思不得姐-精华
    iOS 抖音个人主页布局开发(简单)
  • 原文地址:https://www.cnblogs.com/liyuechan/p/10505302.html
Copyright © 2020-2023  润新知