IMpLeMeNtING the CheCKerBOarD COVerING
although the checkerboard covering problem has a very easy recursive solution conceptually, implementing it can
require a bit of thinking. the details of the implementation aren’t crucial to the main point of the example, so feel
free to skip this sidebar, if you want. one way of implementing a solution is shown here:
def cover(board, lab=1, top=0, left=0, side=None):
if side is None: side = len(board)
# Side length of subboard:
s = side // 2
# Offsets for outer/inner squares of subboards:
offsets = (0, -1), (side-1, 0)
for dy_outer, dy_inner in offsets:
for dx_outer, dx_inner in offsets:
# If the outer corner is not set...
if not board[top+dy_outer][left+dx_outer]:
# ... label the inner corner:
board[top+s+dy_inner][left+s+dx_inner] = lab
# Next label:
lab += 1
if s > 1:
for dy in [0, s]:
for dx in [0, s]:
# Recursive calls, if s is at least 2:
lab = cover(board, lab, top+dy, left+dx, s)
# Return the next available label:
return lab
Do'stlaringiz bilan baham: |