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)

运行测试

评论

  • 最新随笔

  • 尝试让DALLE生成一些连续的精灵图,让gpt帮忙生成一些提示词,如果能稳定输出的话就很强大了。
    让gpt帮忙生成的DALLE提示词
    "Generate a pixel art sprite sheet of a character walking in four directions (north, south, east, west) in a retro video game style."
    "Create a series of pixel art frames showing a character performing different actions like walking, running, jumping, and attacking in a classic 2D game aesthetic."
  • 路过别人山庄的门口,被一条大黑狗边叫边追过来,幸好骑电动车,不然还不一定跑得过,哈哈哈哈哈哈哈哈哈哈。
  • 最近两周也没咋出去玩,主要也是觉得没啥好玩的(笑哭)。看完布莱恩阿瑟的《复杂经济学》后,里面那个酒吧问题勾起我的兴趣,最近空了就花了些时间实现个python版本,顺便搞了篇博文,很享受这种新知识能和已有知识碰撞的感觉。(配张前段时间拍的图片,梧桐山门口前面那条路,挺漂亮的)
  • 盐田港夜景
  • 为啥这猫总喜欢喝杯子里的水
  • 确实开始冷了,在树林里至少要比人类聚集区低个几度,进出入口就能很明显感觉到。看看深圳水库的风景,貌似后面的视野更开阔。
  • 给随笔加了多图的功能,传一传周末拍的风景图,漫无目的的逛也挺好玩的。
  • 逻辑自洽是一套体系的根基,最根本的因素,最吸引人的地方