【问题标题】:Why does this function print the result, but return none?为什么这个函数打印结果,但没有返回?
【发布时间】: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


【解决方案1】:


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 # this might be a problem
    print(np.matrix(sudoku))
    return sudoku

【讨论】:

    【解决方案2】:

    你的假设一定是错误的。

    如果您说print(solve(sudoku)) 打印None,那么这一定是正在发生的事情。

    发生这种情况的唯一方法是,如果最后一个 return 来自代码底部的第三行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      • 2017-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-13
      相关资源
      最近更新 更多