私は宿題のために数独パズルソルバーをやっていますが、いくつかの困難に直面しています。コードは現在、ソリューションを循環しますが、簡単なパズルでは到達し、難しいパズルでは、明らかな理由もなく、いくつかの9でスタックします。これについて何か助けていただければ幸いです。(check_cellは、配置が有効かどうかを判断します。)
- このコードではバックトラッキングが正しく実装されていますか?そうでない場合、どのように修正されますか?
- ソルバーがフリーズするのを防ぐにはどうすればよいですか?約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