首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保存结果Sudoku回溯

保存结果Sudoku回溯
EN

Stack Overflow用户
提问于 2020-11-09 13:57:48
回答 1查看 103关注 0票数 0

我在python中实现了回溯算法来解决sudoku问题。在算法的步骤中,我检查sudoku是否已经解决了,当它已经解决时,我想返回它。但我的函数没有返回。有人能解释一下原因并给我一个解决方案的提示吗?

代码语言:javascript
复制
#Test-Sudoku
grid = [[1,0,7,0,0,5,4,0,0],
        [9,0,0,3,7,0,0,0,0],
        [0,2,3,0,8,0,0,0,0],
        [0,9,2,0,0,0,0,7,0],
        [0,7,0,0,6,0,0,1,0],
        [0,6,0,0,0,0,8,9,0],
        [0,0,0,0,4,0,3,6,0],
        [0,0,0,0,3,7,0,0,1],
        [0,0,8,2,0,0,5,0,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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-09 17:33:48

因为您使用return,它返回none

将结果存储在gridgrid的每一轮更改中。

试试这个:

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64753045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档