1、思路

使用递归与回溯的方法,从开头一直往后在数字为0的地方用1到9按顺序试,成功就填下一个空格,走到无路可走就回到上一层重新试下一个数字,直至完成。
数独用数组表示 ,空值用0表示。

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

2、开始实施

(1)、写一个验证数字是否合格的函数

def check(board,r,c,value):
    for item in board[r]:#判断行内是否重复
        if item==value:
            return False

    for item in board:#判断列内是否重复
        if item[c]==value:
            return False

    for row in board[(r//3)*3:(r//3)*3+3]:#判断宫内是否重复
        for item in row[(c//3)*3:(c//3)*3+3]:
            if item==value:
                return False

    return True

(2)、写一个打印展示数独的函数

def show(board):
    for r in range(9):
        for c in range(9):
            print(board[r][c],end=' ')
        print('')

(3)、主函数

def sudoku(board):
    for r in range(9):
        for c in range(9):
            if r==8 and c==8 and board[r][c]!=0:
                print('------answer------')
                show(board)
                print('------------------')
            if board[r][c]==0:
                for n in range(1,10):
                    if check(board,r,c,n):
                        board[r][c]=n
                        if not sudoku(board):
                            board[r][c]=0
                return False

3、测试

在文件的底部添加以下代码

if __name__=='__main__':
    board=[
        [8,0,0,0,0,0,0,0,0],
        [0,0,3,6,0,0,0,0,0],
        [0,7,0,0,9,0,2,0,0],
        [0,5,0,0,0,7,0,0,0],
        [0,0,0,8,4,5,7,0,0],
        [0,0,0,1,0,0,0,3,0],
        [0,0,1,0,0,0,0,6,8],
        [0,0,8,5,0,0,0,1,0],
        [0,9,0,0,0,0,4,0,0]]
    print('------subject------')
    show(board)
    print('-------------------')
    sudoku(board)

运行测试

评论

  • 最新随笔

  • 对我来说,写东西很好的一点是,自己写的东西,后面基本都会再看,一遍或者很多遍。这样就可以很好地发现自己之前的漏洞,并看看现在有什么变化。
  • 前段时间应该是百度更新了页面结构,那个黑帽泛目录网站我也没有去更新代码,就导致了文章页没有相关推荐,没想到这时候谷歌开始收录了,而且效果还不错。其实之前在谷歌一直不收录的时候就有怀疑过没有尽头的相关推荐很可能是导致不收录的原因,不过也一直没有去管它,而这次误打误撞的收录也恰恰证实了这个想法。(btw,其实这个网站从出现固定链接开始叫泛目录应该不太准确)
  • 最近吉他谱网站iloveguitar上线了,这几天在填充一些内容花了一些时间,这个网站也是使用flask作为后端框架的,前端UI框架使用的是bootstrap4,喜欢吉他的小伙伴欢迎来这里逛一逛哟,有什么建议欢迎在留言板提一下哟。
  • 那个泛目录网站发布了几个星期了,百度没怎么来爬,收了一个首页,谷歌直接就不收了,倒是一个查外链的网站天天来爬(笑哭),还有建议一点就是泛目录还是用在有建站历史的域名比较好(因为已经过了审核期),新域名就尽量不要用了。
  • 刚刚又发了一篇,最近文章百度都不太收录,orz,哈哈
  • 之前那个用python做的静态资源服务器,我又发现了一大用处,现在我都用来在局域网里的不同电脑之间传输文件,真的好用哈哈
  • 今天交换到了博客有史以来第一条友情链接
  • 刚刚更新了一下博客,修复了一些bug,添加了一个项目页