需要制作自动化的“拼图”解算器 . 例:
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
更新 - 在每种情况下(其他矩阵,其他部分),它只有一个解决方案 .