Помогите мне отладить этот кусок кода, который не имеет ошибок компиляции, но не работает должным образом - PullRequest
0 голосов
/ 21 сентября 2009

Я кодирую этот Судоку Солвер по следующему алгоритму:

Учитывая сетку, которая считается допустимой головоломкой судоку и существует хотя бы 1 решение, она найдет первое решение и вернет его.

Головоломка хранится в двумерном массиве, представляющем 9x9 слотов.

Если решение не существует, оно возвращает головоломку, где головоломка [0] [0] = 0, иначе все ячейки в головоломке предположительно заполнены значениями (1-9).

Алгоритм грубого рекурсивного метода:

  1. Он ищет загадку ряд за строкой в ​​поисках одного слота.
  2. Метод possibleValuesInGrid() возвращает возможные значения, которые могут поместиться в слот, на основе текущей головоломки и ее существующих значений.
  3. Если в слоте нет возможных значений, возвращается False (головоломка [0] [0] = 0)
  4. Иначе, оно извлекает одно из значений из LinkedList возможных значений и вставляет его в слот, а затем рекурсивно вызывает тот же метод снова, пока все слоты не будут заполнены.

Код размещен на pastebin, поэтому я не заполняю эту страницу. Я подозреваю, что где-то может быть логическая ошибка, хотя это грубый метод или даже ошибка, которую я не могу понять.

Я жестко запрограммировал некоторые системные печатные строки, чтобы прочитать их на предмет логической ошибки, однако я не мог понять, где.

Кроме того, как это остановилось на [8] [4], также любопытно.

1 Ответ

5 голосов
/ 21 сентября 2009

Ваш код не выполняется, потому что вы используете клонирование в многомерном массиве (строка 44). Клон дает только поверхностную копию, а в случае двумерного массива этого недостаточно. Вам нужен System.arraycopy (), но в каждой строке, поэтому вызывайте что-то вроде

public void 2dArrayCopy(int[][] source,int[][] target) {
    for (int a=0; a<source.length; a++) {
        System.arraycopy(source[a],0,target[a],0,source[a].length);
    }
}

Вы можете увидеть симптом вашего неудачного клона в вашем журнале в строке 49, где код внезапно видит головоломку с пустым местом в 0: 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...