【发布时间】:2021-03-02 21:07:25
【问题描述】:
def solve(sudoku):
for y in range(9):
for x in range(9):
if sudoku[y][x] == 0:
for n in range(1, 10):
if possible(x, y, n):
sudoku[y][x] = n
solve(sudoku)
sudoku[y][x] = 0
return
print(np.matrix(sudoku))
return sudoku
此函数打印已解决的数独,但 print(solve(sudoku)) 不返回任何内容。为什么函数可以打印(数独)却没有返回?
【问题讨论】:
-
因为这就是
return没有参数的作用。 -
您需要
return solve将结果传回递归调用链,最后将该结果返回给原始调用者。否则,在备份的路上,return None和/或sudoku[y][x] = 0会给你提供除了已解决的数独之外的东西,None或清零的数独。 -
如果您想返回已求解的矩阵,您的算法显然存在问题,因为只有在您将数字插入解决方案时,您总是然后设置它回到 0。因此,生成的矩阵不能包含除 0 以外的任何数字。
-
原来数组被逐步设置回零,因为它被传递回递归链。我需要在原始打印语句时用已解决的数独填充一个全新的数组。现在它工作得很好:)
-
@Henri 很高兴你解决了。随意张贴self answer
标签: python sudoku recursive-backtracking