需要制作自动化的“拼图”解算器 . 例:

matrix = [[0,0,0,0],
          [0,0,0,0],
          [0,0,0,0],
          [0,1,0,0]]

piece1 = [[2,2],
          [2,0],
          [2,0],
          [2,0]]

piece2 = [[3,3],
          [0,3],
          [0,3],
          [0,3]]

piece3 =  [[4,4],
           [4,4],
           [0,4]]

所有部分都以碎片形式写成:

pieces=[piece1,piece2,piece3].

碎片的数量和类型可以与此不同,因此需要一些通用的 . 所以最终矩阵应如下所示:

solution=[[2,2,3,3],
          [2,4,4,3],
          [2,4,4,3],
          [2,1,4,3]]

到目前为止,我有这个代码,但它说RecursionError . 试图从左上角填充矩阵,但不起作用,任何想法?

def move(matrix, piece, dx=0, dy=0):
  for x, line in enumerate(piece):
    for y, e in enumerate(line):
       if e != 0: matrix[x+dx][y+dy] = e
       else:
          for i in range(len(matrix)):
              for j in range(len(matrix[0])):
                 if matrix[i][j]==0:
                    dx=j
                    dy=i
                    break
                 else:
                    continue
          move(matrix,piece,dx,dy)

    return matrix
def runner (matrix, pieces):
    for i in range(len(pieces)):
        move(matrix,pieces[i],dx=0,dy=0)
    return matrix

没有递归的原始移动代码:

def move(matrix, piece, dx=0, dy=0):
  for x, line in enumerate(piece):
    for y, e in enumerate(line):
       if e != 0: matrix[x+dx][y+dy] = e
  return matrix

更新 - 在每种情况下(其他矩阵,其他部分),它只有一个解决方案 .