Я кодирую этот Судоку Солвер по следующему алгоритму:
Учитывая сетку, которая считается допустимой головоломкой судоку и существует хотя бы 1 решение, она найдет первое решение и вернет его.
Головоломка хранится в двумерном массиве, представляющем 9x9 слотов.
Если решение не существует, оно возвращает головоломку, где головоломка [0] [0] = 0, иначе все ячейки в головоломке предположительно заполнены значениями (1-9).
Алгоритм грубого рекурсивного метода:
- Он ищет загадку ряд за строкой в поисках одного слота.
- Метод
possibleValuesInGrid()
возвращает возможные значения, которые могут поместиться в слот, на основе текущей головоломки и ее существующих значений.
- Если в слоте нет возможных значений, возвращается False (головоломка [0] [0] = 0)
- Иначе, оно извлекает одно из значений из
LinkedList
возможных значений и вставляет его в слот, а затем рекурсивно вызывает тот же метод снова, пока все слоты не будут заполнены.
Код размещен на pastebin, поэтому я не заполняю эту страницу. Я подозреваю, что где-то может быть логическая ошибка, хотя это грубый метод или даже ошибка, которую я не могу понять.
Я жестко запрограммировал некоторые системные печатные строки, чтобы прочитать их на предмет логической ошибки, однако я не мог понять, где.
Кроме того, как это остановилось на [8] [4], также любопытно.