微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

保存结果数独回溯

如何解决保存结果数独回溯

我已经在python中实现了回溯算法来解决数独。在算法的步骤中,我检查数独是否已经解决,何时解决,我想将其返回。但是我的函数只是返回None。有人可以解释一下原因,并给我提示解决方案吗?

#Test-Sudoku
grid = [[1,7,5,4,0],[9,3,[0,2,8,9,6,1,1],7]]


def possible(row,col,num,grid):
    """ Check if num can be passed to grid[row][col]"""
    if grid[row][col] != 0:
        return False
    for i in range(9):
        if grid[row][i] == num or grid[i][col] == num:
            return False
    row0 = (row//3)*3
    col0 = (col//3)*3
    for i in range(3):
        for j in range(3):
            if grid[row0+i][col0+j] == num:
                return False
    return True

def is_solved(grid):
    """ Check if Sudoku is already solved/full"""
    for i in range(9):
        for j in range(9):
            if grid[i][j] == 0:
                return False
    return True


def solve(grid):
    """ Backtracking algorithm to solve Sudoku"""
    for r in range(9):
        for c in range(9):
            if grid[r][c] == 0:
                for i in range(1,10):
                    if possible(r,c,i,grid): 
                        grid[r][c] = i
                        if is_solved(grid):
                            # Print grid for test
                            print("Show Solved Sudoku:")
                            print(grid)
                            return(grid) 
                        solve(grid)
                        grid[r][c] = 0
                return 
    return 
    

solved_sudoku = solve(grid)

print(solved_sudoku)

解决方法

因为您使用return返回none
您将结果存储在grid中,而grid的变化每转

尝试一下:

def solve(grid):
    """ Backtracking algorithm to solve Sudoku"""
    for r in range(9):
        for c in range(9):
            if grid[r][c] == 0:
                for i in range(1,10):
                    if possible(r,c,i,grid): 
                        grid[r][c] = i 
                        solve(grid)
                    if is_solved(grid):
                        return
                    grid[r][c] = 0
                return

solve(grid)
print(grid)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。