以下是一个简单的 Python 程序,可以生成数独题目:

import random

def create_puzzle():
    # 初始化一个 9x9 的数独矩阵
    puzzle = [[0 for x in range(9)] for y in range(9)]
    
    # 生成第一行随机数
    first_row = random.sample(range(1, 10), 9)
    
    # 将第一行随机数填入数独矩阵
    for i in range(9):
        puzzle[0][i] = first_row[i]
    
    # 逐行填入数字
    for i in range(1, 9):
        # 对上一行的数字进行随机打乱
        prev_row = puzzle[i-1].copy()
        random.shuffle(prev_row)
        
        # 遍历当前行的每个位置
        for j in range(9):
            # 计算当前位置所在的 3x3 小矩阵的左上角坐标
            box_x = (i // 3) * 3
            box_y = (j // 3) * 3
            
            # 生成当前位置可以填入的数字的列表
            choices = [x for x in range(1, 10) if x not in puzzle[i] and x not in [puzzle[k][j] for k in range(i)] and x not in [puzzle[x][y] for x in range(box_x, box_x+3) for y in range(box_y, box_y+3)]]
            
            # 随机从可选数字中选择一个填入当前位置
            if choices:
                puzzle[i][j] = random.choice(choices)
            else:
                # 如果没有可选数字,则回溯到上一行重新填写
                return create_puzzle()
    
    return puzzle

# 测试生成数独题目
puzzle = create_puzzle()
for row in puzzle:
    print(row)

这个程序的基本思路是,先随机生成数独矩阵的第一行,然后逐行填写数字。对于每一行,先随机打乱上一行的数字顺序,然后遍历当前行的每个位置,找到可以填入的数字的列表,从中随机选择一个填入当前位置。如果当前位置没有可选数字,则回溯到上一行重新填写。

Python 数独生成算法:代码详解及实现

原文地址: https://www.cveoy.top/t/topic/lfht 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录