Простая оптимизация задания без переосмысления вашего алгоритма сильно ограничивает вашу общую эффективность. Когда вы делаете выбор, вам обычно требуется много времени, прежде чем вы обнаружите противоречие.
Вместо представления «Вот значения, которые я выяснил», попробуйте представить «Вот значения, которые у меня есть». осталось попробовать в каждом месте. " И теперь ваша основная задача: «Устранить это значение с этого места». (Помните, что уменьшение его до 1 приводит к исключению значения из всех его одноранговых узлов, потенциально рекурсивно.)
Назначение теперь «Удалите все значения, кроме этого, с этого места».
И теперь ваша основная операция поиска: «Найти квадрат с наименьшим количеством оставшихся возможностей> 1. Попробуйте каждую возможность по очереди».
Это может показаться тяжелым. Но немедленное распространение ограничений приводит к очень быстрому обнаружению ограничений для остальной части решения, что намного быстрее, чем необходимость экспоненциального количества рассуждений, прежде чем найти логическое противоречие в вашем частичном решении.
I Рекомендую сделать это самостоятельно. Но https://norvig.com/sudoku.html имеет полный рабочий код, который вы можете посмотреть при необходимости.