Я создаю решатель проблем N Queens с помощью Backtracking. Однако поворот заключается в том, что пользователь устанавливает первую ферзь, а затем выполняется обратный трекинг для обработки остальных 7 королев. Моя программа выполняет эту задачу, и функция обратного отслеживания является функциональной, однако я могу поместить королеву только в первый левый столбец, поскольку параметр, который принимает функция, - это столбец, с которого начинается процедура возврата.
Доска класса
public boolean solveQueen(int col) {
if (col >= board.length) {
printBoard();
System.out.println("queen");
return true;
}
for (int i = 0; i < board.length; i++)
if (notUnderAttack(i, col)) {
placeQ(i, col);
solveQueen(col + 1);
removeQ(i, col);
}
return false;
}
Основной класс
queen.placeQ(0, 2);
queen.solveQueen(3);
queen.printBoard();
Чтобы решить эту проблему, я попытался обернуть вокруг первой королевы и начать откат назад столбца после первоначального размещения, но проблема здесь в том, что пока он помещает ферзей в столбец 3,4,5,6,7 и предварительно помещает столбец. королева находится во 2-м столбце, в первом столбце нет королев. Я не совсем уверен, как добавить королеву в первом столбце. Я попытался использовать по модулю, но я не уверен, правильно ли я это реализовал, поэтому я удалил его.
public boolean notUnderAttack(int row, int col) {
if ((rowCheck(row) == false) || (colCheck(col) == false) || (diagonalCheck(row, col) == false)) {
return false;
}
return true;
}