Я написал решение Sudoku для очень простых проблем Sudoku в Python. Как это работает, проверяя каждый пустой квадрат, и если есть только одно возможное число, которое является законным, замените пустой квадрат на это число. Как только он прошел всю головоломку, если еще есть еще несколько пустых квадратов, он снова называет себя новой головоломкой. В той части, где у меня возникают проблемы, я хочу, чтобы решатель проверял в конце каждого вызова, если головоломка такая же, как и в начале вызова, и если она не изменилась, это означает, что все оставшиеся пустые квадраты имеют более одного возможного значения, и поэтому решатель должен вернуть False, чтобы указать, что решатель не способен решить эту конкретную загадку. Однако, когда я попытался реализовать это, Solver только проходит головоломку один раз и возвращает False. Вот мой код:python sudoku puzzle? проверка головоломки до и после
def Solver(puzzle):
oldpuzzle = puzzle
count = 0
for row in range(9):
for col in range(9):
if puzzle[row][col] == '0':
possible, numpossible = getPossible(puzzle, row, col)
if numpossible == 1:
puzzle[row][col] = possible[0]
count += puzzle[row].count('0')
if count > 0:
if oldpuzzle == puzzle:
return False
else:
Solver(puzzle)
else:
return True
Функция getPossible() возвращает список возможных значений и длину списка.
Вот главная() функция:
def main():
puzzle = [
['0','2','0','1','7','8','0','3','0'],
['0','4','0','3','0','2','0','9','0'],
['1','0','0','0','0','0','0','0','6'],
['0','0','8','6','0','3','5','0','0'],
['3','0','0','0','0','0','0','0','4'],
['0','0','6','7','0','9','2','0','0'],
['9','0','0','0','0','0','0','0','2'],
['0','8','0','9','0','1','0','6','0'],
['0','1','0','4','3','6','0','5','0']
]
if Solver(puzzle):
print "Solved!"
for row in puzzle:
print ' '.join(row)
else:
print "Failed!"
Как я могу получить программу, чтобы правильно сравнить состояние головоломки до и после того, как цикл?
Выглядит как 'getPossible()' может быть возвращение нечто иное, чем '1' для' numpossible', что означало бы, что 'puzzle' не модифицируются. – TigerhawkT3
Я не думаю, что это так, потому что если я удалю оператор if в самом конце и просто разрешу Solver бесконечно терпеть, и каждый раз добавляю инструкцию печати, вы можете видеть, что она меняет загадку. Кроме того, я уже смог решить несколько простых головоломок с помощью этой программы, у меня просто проблемы с более трудными головоломками. –