python求数独全解

来源:互联网 发布:网络代理可信吗 编辑:程序博客网 时间:2024/06/08 12:00

数独可能不止一个解,本程序试图找出全部的解,测试发现所谓的最难数独运行时间明显非常长

所谓最难的就是第一个范例,得出唯一解倒是不满,只是程序要遍历全部可能性,导致耗费时间冗长。

范例二是多解数独

范例二和范例三耗费时间极短

sudoku = [    [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, 0, 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]]sudoku = [    [0, 0, 0, 2, 0, 0, 1, 0, 0],    [8, 0, 0, 0, 0, 6, 0, 3, 0],    [0, 0, 0, 0, 0, 1, 7, 5, 0],    [0, 0, 0, 5, 0, 0, 4, 0, 0],    [0, 7, 5, 0, 0, 0, 6, 2, 0],    [0, 0, 2, 0, 0, 3, 0, 0, 0],    [0, 5, 4, 7, 0, 0, 0, 0, 0],    [0, 2, 0, 6, 0, 0, 0, 0, 9],    [0, 0, 6, 0, 0, 9, 0, 0, 0]]sudoku = [    [0, 6, 1, 0, 3, 0, 0, 2, 0],    [0, 5, 0, 0, 0, 8, 1, 0, 7],    [0, 0, 0, 0, 0, 7, 0, 3, 4],    [0, 0, 9, 0, 0, 6, 0, 7, 8],    [0, 0, 3, 2, 0, 9, 5, 0, 0],    [5, 7, 0, 3, 0, 0, 9, 0, 0],    [1, 9, 0, 7, 0, 0, 0, 0, 0],    [8, 0, 2, 4, 0, 0, 0, 6, 0],    [0, 4, 0, 0, 1, 0, 2, 5, 0]]def show():    for i in range(len(sudoku)):        for j in range(len(sudoku[i])):            print(sudoku[i][j],end=" ")        print("")def check(i,j,value):    for item in sudoku[i]:        if item == value:            return False    for item in sudoku:        if item[j] == value:            return False    row = i//3    col = j//3    for r in range(row*3,row*3+3):        for c in range(col*3,col*3+3):            if sudoku[r][c] == value:                return False    return Truedef shudu():    for i in range(9):        for j in range(9):            if i == 8 and j == 8 and sudoku[i][j] > 0:                show()                print("=================")            if sudoku[i][j] == 0:                for value in range(1, 10):                    if check(i, j, value):                        sudoku[i][j] = value                        if not shudu():                            sudoku[i][j] = 0                return Falseshudu()

原创粉丝点击