解决数独谜题时的递归问题



我正在写一个程序来解决数独难题。我有一个字典,它将所有空单元格位置作为键和它们各自的可能值保存在一个列表中。下面显示的是字典

的一部分
empty_cells = {'00': ['3', '5', '6'], '01': ['1', '3', '5'], '06': ['1', '6']}

我试图通过这个列表递归地调用一个函数进行暴力破解,但我似乎无法通过列表进行进展。

def brute(board):
for cell in list(empty_cells):
for n in empty_cells[cell]:
board[int(cell[0])][int(cell[1])] = n
brute(board)
board[int(cell[0])][int(cell[1])] = "."   

return

我不太确定为什么每当我调用brute函数时,该函数不会移动到列表中的下一个空单元格,而只是停留在00单元格,直到递归深度达到。

问题是你没有办法跟踪你的进度。如果你仔细想想,你永远在调用brute,到达键' 00 ',在选项'3',设置board[int(cell[0])][int(cell[1])]到'3',然后重复,在下一个递归中再次设置board[int(cell[0])][int(cell[1])]到'3',一次又一次。

要解决这个问题,实现一些方法来跟踪当前状态。我建议不要遍历所有可能性,而是创建一个函数来查找下一个打开单元格。当然,你的代码需要一些条件来检查你是否赢了

我认为它可以迭代,但你在分配给其他东西

尝试改变

board[int(cell[0])][int(cell[1])]

board[int(key[0])][int(key[1])]

最新更新