Алгоритм Java с 8 головоломками - PullRequest
0 голосов
/ 08 февраля 2019

Я работаю над 8-головоломкой для класса и немного расстраиваюсь, проверяя код.Мне нужно написать код относительно движения влево, вправо, вверх и вниз.Когда я удаляю право, код выдает ошибку «index of bounds -1» для двойного массива после расширения, чтобы получить узлы-преемники и добавить их.Правильный ли приведенный ниже код для прохождения лабиринта / преемников, который возвращает дочерний элемент родителю?Что-то не так в коде слева, вверх, вниз и вправо?

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

Головоломка должна выдавать:

1 2 3

4 5 6

7 80

Типичный вывод показывает:

1 7 8

5 4 2

3 6 0

Таким образом, путь кажетсябыть неправым, и я считаю, что это связано с кодом движения ниже, но я не уверен.Вопрос, который у меня есть, - это точный код ниже, нужно ли что-то менять в нем?С этим связано что-то, вызывающее ArrayIndexoutOfBounds -1, или это что-то еще?

ArrayList<Node> successors = new ArrayList<Node>();
//generate a successor from moving the 0 to the right 
if (col < size-1) {
    int[][] right = Board.copyBoard(board);
    right[row][col] = right[row][col + 1];
    right[row][col+1] = 0;                  
    successors.add(new Node(right)); 
} else if (col < size - 1) {
    int[][] left = Board.copyBoard(board);
    left[row][col] = left[row][col-1];
    left[row][col-1] = 0;
    successors.add(new Node(left));
} else if (row < size-1) {
    int[][] down = Board.copyBoard(board);
    down[row][col] = down[row + 1][col];
    down[row + 1][col] = 0;                 
    successors.add(new Node(down)); 
} else if (row < size - 1) {
    int[][] up = Board.copyBoard(board);
    up[row][col] = up[row-1][col];
    up[row-1][col] = 0;
    successors.add(new Node(up));
}

return successors;

1 Ответ

0 голосов
/ 08 февраля 2019

В данный момент ваш код проверяет col 0, а последняя строка> 0

...