zoukankan      html  css  js  c++  java
  • 递归学习:棋盘拼接

    题目:一块不完整的棋盘(就是某个地方缺了一个格子)一及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形砖的拼接。

    整副棋盘由大化小。

  • 相关阅读:
    C博客作业02--循环结构
    博客作业01--顺序分支结构
    C博客作业00--我的第一篇博客
    实验四
    实验三
    网络管理snmp实验
    C语言博客作业02--循环结构
    C博客作业03--函数
    循环结构
    C语言博客作业02--循环结构
  • 原文地址:https://www.cnblogs.com/liyuechan/p/10505302.html
Copyright © 2011-2022 走看看