Python 数独生成算法:代码详解及实现
以下是一个简单的 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)
这个程序的基本思路是,先随机生成数独矩阵的第一行,然后逐行填写数字。对于每一行,先随机打乱上一行的数字顺序,然后遍历当前行的每个位置,找到可以填入的数字的列表,从中随机选择一个填入当前位置。如果当前位置没有可选数字,则回溯到上一行重新填写。
原文地址: https://www.cveoy.top/t/topic/lfht 著作权归作者所有。请勿转载和采集!