我做功課一道數獨題求解,但我遇到了一些困難。現在的代碼循環通過解決方案,雖然它確實達到了它的容易謎題,而對於更難的謎題,它沒有明顯的原因卡住了幾個9。我將不勝感激任何幫助。 (check_cell確定該位置是否有效。)Python的數獨遞歸,以蠻力回溯錯誤
- 是回溯這段代碼正確實施,如果沒有,怎麼會縫?
- 如何阻止求解器凍結?它解決了大約3行然後凍結,將大部分值更改爲9。
一些代碼:
def solve_helper(self, row, col):
# Try placing a number in each column of current row
board = self.the_board
if board[row][col] != 0:
?????
elif board[row][col] == 0:
for i in range(1,10):
print("Setting value at i with ") + str (i) + (" located at ") + str(row) + str(col)
self.set_cell(row, col, i)
self.guesses = self.guesses + 1
if self.check_cell(row, col):
if self.solve_helper(row, col): return True
else:
self.set_cell(row, col, 0)
else:
return self.mover(row,col)
return False
def mover(self, row, col):
if col + 1 != 9:
return self.solve_helper(row, (col+1))
elif row + 1 != 9:
print "Moving to row" + str(row + 1)
return self.solve_helper((row+1),0)
else:
print "SOLUTION FOUND"
return True
不的功能,因爲它已經作爲solve_helper的一部分跳過非零值,由else語句? –
@CluelessCoder:問題在於,通過轉到else區塊跳過非零值後,即使找到解決方案,也總是返回False。任何時候你遞歸,你都需要準備好返回'True',如果這個調用導致找到解決方案。當您放棄當前棋盤狀態並需要回溯時,您只想返回False。 – Blckknght
我仍然不確定False是如何傳入的,我不確定如何正確引導非零。代碼似乎是回溯,但傳遞正確的值,並導致三行中的空字符都變成了9。 –