保存结果数独回溯

问题描述

我已经在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)