递归数独求解器无法解决任何问题

时间:2020-08-31 11:43:45

标签: python sudoku

我当时正在开发Sudoku求解器,当我运行它时,它却不起作用-函数f返回了none类型。调试后,我发现代码无法解决某些平方。我不知道为什么会这样,但是我怀疑找到一个可能的数字后,循环检查正方形中所有可能的数字会停止,也不会检查其余的数字。您能在代码中指出我的问题吗?谢谢。

注意:对于数独中的空白处,输入0。

# enter the Sudoku as a two-dimensional array (a[i][j])

def square_check(array, loc_x, loc_y, val):
    added_x = loc_x - (loc_x % 3)
    added_y = loc_y - (loc_y % 3)
    for i in range(3):
        for j in range(3):
            if i+added_y != loc_y or j+added_x != loc_x:
                if array[i+added_y][j+added_x] == val:
                    return False
    return True


def line_check(array, loc_x, loc_y, val):
    for i in range(9):
        if i != loc_x:
            if array[loc_y][i] == val:
                return False
    return True


def col_check(array, loc_x, loc_y, val):
    for i in range(9):
        if i != loc_y:
            if array[i][loc_x] == val:
                return False
    return True


def f(array):
    flag = True
    mark = True
    for i in range(0, 9):
        for j in range(0, 9):
            if array[i][j] == 0:
                flag = False
    if flag:
        return array

    for i in range(0, 9):
        for j in range(0, 9):
            if array[i][j] == 0:
                for num in range(1, 10):
                    if square_check(array, j, i, num):
                        if col_check(array, j, i, num):
                            if line_check(array, j, i, num):
                                new_array = array.copy()
                                new_array[i][j] = num
                                mark = False
                                f(new_array)
                if mark:
                    break


def to_str(array):
    for i in range(len(array)):
        print(array[i])
    print("")


to_str(f(sudoku))

0 个答案:

没有答案