打印
[活动]

数独的程序**方法

[复制链接]
110|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
下面是一个使用Python编写的数独求解程序。这个程序使用了回溯算法来找到数独的解决方案。

//```python
def print_board(board):
    for row in board:
        print(" ".join(str(num) for num in row))

def find_empty_location(board):
    for i in range(9):
        for j in range(9):
            if board[j] == 0:
                return (i, j)
    return None

def is_safe(board, row, col, num):
    # Check if 'num' is not already placed in current row, current column and current 3x3 box
    for x in range(9):
        if board[row][x] == num or board[x][col] == num:
            return False
    start_row, start_col = 3 * (row // 3), 3 * (col // 3)
    for i in range(start_row, start_row + 3):
        for j in range(start_col, start_col + 3):
            if board[j] == num:
                return False
    return True

def solve_sudoku(board):
    empty_loc = find_empty_location(board)
    if not empty_loc:
        return True  # Puzzle solved
    row, col = empty_loc
    for num in range(1, 10):
        if is_safe(board, row, col, num):
            board[row][col] = num
            if solve_sudoku(board):
                return True
            board[row][col] = 0  # Backtrack
    return False

if __name__ == "__main__":
    board = [
        [5, 3, 0, 0, 7, 0, 0, 0, 0],
        [6, 0, 0, 1, 9, 5, 0, 0, 0],
        [0, 9, 8, 0, 0, 0, 0, 6, 0],
        [8, 0, 0, 0, 6, 0, 0, 0, 3],
        [4, 0, 0, 8, 0, 3, 0, 0, 1],
        [7, 0, 0, 0, 2, 0, 0, 0, 6],
        [0, 6, 0, 0, 0, 0, 2, 8, 0],
        [0, 0, 0, 4, 1, 9, 0, 0, 5],
        [0, 0, 0, 0, 8, 0, 0, 7, 9]
    ]
    if solve_sudoku(board):
        print_board(board)
    else:
        print("No solution exists")
//```

这个程序首先定义了一个打印数独棋盘的函数`print_board`,一个查找空白位置的函数`find_empty_location`,一个检查数字是否可以放在某个位置的函数`is_safe`,以及主要的解决数独的函数`solve_sudoku`。最后在主函数中初始化一个数独棋盘并调用`solve_sudoku`函数尝试解决它。如果找到了解决方案,它会打印出来;如果没有解决方案,它会输出"No solution exists"。

纠正数独中的错误,给出正确答案:


数独问题的正确答案如下:

5 3 4 | 6 7 8 | 9 1 2
6 7 2 | 1 9 5 | 3 4 8
1 9 8 | 3 4 2 | 5 6 7
------+------+------
8 5 9 | 7 6 1 | 4 2 3
4 2 6 | 8 5 3 | 7 9 1
7 1 3 | 9 2 4 | 8 5 6
------+------+------
9 6 1 | 5 3 7 | 2 8 4
2 8 7 | 4 1 9 | 6 3 5
3 4 5 | 2 8 6 | 1 7 9

请注意,此解答基于标准数独规则,即每行、每列及每个3x3宫格内的数字从1到9各出现一次。

213966752a05d6ef87.png (140.92 KB )

213966752a05d6ef87.png

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

609

主题

2119

帖子

5

粉丝