尝试创建自己的数独求解器。
我将0用作空白
求解器几乎完成了,但是有时它不能替换0。这是什么问题?
def sud(nums):
for row in nums:
for n in row:
if n == 0:
under = [u_row[row.index(n)] for u_row in sudoku]
for i in range(1, 10):
if i not in row and i not in under:
row[row.index(n)] = i
return nums
此处的数字是带有数独的列表,例如:
sudoku = [
[0, 0, 6, 0, 5, 4, 9, 0, 0],
[1, 0, 0, 0, 6, 0, 0, 4, 2],
[7, 0, 0, 0, 8, 9, 0, 0, 0],
[0, 7, 0, 0, 0, 5, 0, 8, 1],
[0, 5, 0, 3, 4, 0, 6, 0, 0],
[4, 0, 2, 0, 0, 0, 0, 0, 0],
[0, 3, 4, 0, 0, 0, 1, 0, 0],
[9, 0, 0, 8, 0, 0, 0, 5, 0],
[0, 0, 0, 4, 0, 0, 3, 0, 7]
]
这是此列表的输出:
[2, 3, 6, 8, 5, 4, 9, 1, 7]
[1, 8, 9, 5, 6, 7, 0, 4, 2]
[7, 1, 2, 4, 8, 9, 6, 3, 5]
[3, 7, 6, 2, 9, 5, 4, 8, 1]
[8, 5, 1, 3, 4, 7, 6, 2, 9]
[4, 6, 2, 9, 1, 3, 7, 0, 0]
[5, 3, 4, 6, 2, 7, 1, 9, 8]
[9, 2, 4, 8, 3, 7, 0, 5, 0]
[6, 9, 5, 4, 8, 1, 3, 2, 7]
答案 0 :(得分:3)
您的实现存在缺陷。您正在做的是,将不在行或列中的第一个数字放在该位置。但这并非总是如此。可能有多个这样的数字。
例如,在您的数独输入中,第一个元素的初始值可以为2、3、6和8。
您需要做的是,如果最终电路板上仍包含零,则回溯到先前的状态并尝试放置另一个数字,然后对该状态进行递归求解。
的信息