【发布时间】:2014-03-13 17:55:03
【问题描述】:
我的数独求解器有问题。 我能够检查垂直和水平,但现在我将检查块。 这是我现在用于检查块的代码
def print_sudoku(array):
for i in range(0,3):
print()
for j in range(0,3):
print(array[i][j][0],end=' ')
def controleren(array):
for i in range(0,8):
for j in range(0,8):
if distance[i][j][1] + distance[i][j][2]+ distance[i][j][3]+ distance[i][j][4]+ distance[i][j][5]+ distance[i][j][6]+ distance[i][j][7]+ distance[i][j][8]+ distance[i][j][9] == 1:
if distance[i][j][k] == 1:
distance[i][j][k] = k
def main():
pass
import pprint
distance = [[[0 for k in range(10)] for j in range(3)] for i in range(3)]
distance[0][0][0] = '*'
distance[0][1][0] = 2
distance[0][2][0] = 3
distance[1][0][0] = 4
distance[1][1][0] = 5
distance[1][2][0] = 6
distance[2][0][0] = 7
distance[2][1][0] = 8
distance[2][2][0] = 9
print_sudoku(distance)
这里我给每一种可能性值 1
for i in range(0,3):
for j in range(0,3):
if distance[i][j][0] == '*':
for k in range(1,10):
distance[i][j][k] = 1
这是重要的部分。 while 循环是无限距离[0][0][0] 保持等于 * 而不是获得 1 的值,这是块中唯一缺少的数字。正在发生的事情是:已经站在另一个距离[][][] 之一中的每个值都设置为 0
while distance[0][0][0] == '*':
for i in range(0,3):
for j in range(0,3):
if distance[i][j][0] != '*':
k = distance[i][j][0]
for i in range(0,3):
for j in range(0,3):
distance[i][j][k] = 0
在这一部分中,代码会查找缺失的数字,因此是否存在一种可能性,即一个值为 1 的数字,因为该数字就是缺失的数字。
for i in range(0,3):
for j in range(0,3):
if distance[i][j][1] + distance[i][j][2]+ distance[i][j][3]+ distance[i][j][4]+ distance[i][j][5]+ distance[i][j][6]+ distance[i][j][7]+ distance[i][j][8]+ distance[i][j][9] == 1:
for k in range(1,10):
if distance[i][j][k] == 1:
distance[i][j][0] = k
print('')
print_sudoku(distance)
我希望你理解它,可能不理解(我很难解释我在做什么)所以如果有什么不清楚的地方就说出来。
鲁迪
【问题讨论】:
-
我知道这不是你的主要问题,但你不需要 0 作为范围内的第一个参数。 range(3) 就足够了。
-
是的,你是对的,但我认为这只是一种习惯 :)
-
自我推广:我在 Excel VBA 中编写了一个数独求解器。代码在github.com/wkschwartz/xlSudoku
-
你知道在你的无限while循环中有两个
is和js吗?如果不是故意的,请尝试将它们重命名为其他名称,例如 n-m。 -
在您的 while 循环中,您嵌套了使用相同迭代变量的 for 循环。这会导致问题。
标签: python block sudoku solver