【问题标题】:solving a backtracking of sudoku game解决数独游戏的回溯
【发布时间】:2021-03-30 09:46:44
【问题描述】:

我昨天刚学会回溯,我很困惑。在本节中

if y == 9:
    if x == 8:
        display(s)
        return 1
    else:
        sudoku(s,x+1,0)

我使用 return 停止运行程序,但 print(sudoku(s,0,0)) 仍然打印 None 值而不是 1。谁能弄清楚为什么?

s = [[5,3,0,0,7,0,0,0,0],
     [6,0,0,1,9,5,0,0,0],
     [0,9,8,0,0,0,0,6,0],
     [8,0,0,0,6,0,0,0,3],
     [4,0,0,8,0,3,0,0,1],
     [7,0,0,0,2,0,0,0,6],
     [0,6,0,0,0,0,2,8,0],
     [0,0,0,4,1,9,0,0,5],
     [0,0,0,0,8,0,0,7,9]]


def display(s):
    for i in s:
        print(*i)


def checkvalid(s,x,y,k):
    for i in range(9):
        if s[x][i] == k or s[i][y] == k:
            return False
    for i in range(x//3*3, x//3*3+3):
        for j in range(y//3*3, y//3*3+3):
            if s[i][j] == k:
                return False
    return True


def sudoku(s,x,y):
    if y == 9:
        if x == 8:
            display(s)
            return 1
        else:
            sudoku(s,x+1,0)
    elif s[x][y] == 0:
        for k in range(1,10):
            if checkvalid(s,x,y, k):
                s[x][y] = k
                sudoku(s,x,y+1)
                s[x][y] = 0
    else:
        sudoku(s,x,y+1)


print(sudoku(s,0,0))

【问题讨论】:

  • 您没有从 elifelse 块返回任何内容。不返回任何内容隐式返回None

标签: python python-3.x return backtracking sudoku


【解决方案1】:

这是因为你递归调用了sudoku()。因此,您将1 返回给最后一个调用者,即来自elif/else 路径之一的sudoku() 本身。在这些路径中,您不会返回值。相反,您离开 if/elif/else 块并通过返回默认值 None 退出函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多