나는 C-c 체스 판과 함께 N-Queens 퍼즐의 자바 알고리즘을 작성했습니다. 내 재귀 적 방법의 코드는 다음과 같습니다.재귀 N-Queens : 누락 된 솔루션
모든 해결책을 찾지 못했습니다.
무엇을 내 기능
아이디어를 만들기 위해 주요 방법, 해결책까지 그것을 왕비의 최대 수를주는 내 함수에 대한 첫 번째 호출이 발견되고, 어떤 여왕 이러한 새없이 체스 판 -queen 좌표 : x = 0, y = 0.
이 기능은 체스 판을 통과합니다. 각 사각형에 대해 여왕 (0, 0)을 놓을 수 있는지 테스트합니다 (예 : 위협 없음). 여왕 (0; 0)은 놓을 수 있습니까? 자, 체스 판을 수정하고 함수 (재귀 호출)를 호출합니다. 이 재귀 호출은 "최대 퀸 - 1", 수정 된 체스 판 및 "new-queen 's y + 1"(조금 더 복잡함)으로 수행됩니다.
N 용액으로실측치 = 4, C = 4 (존재 정상적으로 두 용액 ...!)
& & & Q
Q & & &
& & & Q
내 기능
private static void setQueen(int nb_queens, ArrayList<ArrayList<Boolean>> chessboard, int x, int y, ArrayList<ArrayList<ArrayList<Boolean>>> solutions) {
if (nb_queens == 0) { // If there isn't any queen remaining, it means we found a solution
drawChessboard(chessboard);
solutions.add(chessboard);
}
for(int i = x; i < chessboard.size(); i++) {
for (int z = y; z < chessboard.get(i).size(); z++) {
if(!canBePlaced(i, z, chessboard)) {
chessboard.get(z).set(i, true); // On peut donc placer cette reine(x;y) et on le fait
setQueen(nb_queens-1, chessboard, i+1, 0, solutions);
chessboard.get(z).set(i, false);
}
}
}
}
이전 코드Q & &
최근 코드
private static void setQueen(int nb_queens, ArrayList<ArrayList<Boolean>> chessboard, int x, int y, ArrayList<ArrayList<ArrayList<Boolean>>> solutions) {
if (nb_queens == 0) {
drawChessboard(chessboard); // Il n'y a plus de reine à placer => on dessine cette solution
solutions.add(chessboard);
}
for(int i = x; i < chessboard.size(); i++) {
for (int z = y; z < chessboard.get(i).size(); z++) {
if(!isAQueenAlreadyPresent(i, z, chessboard)) {
chessboard.get(z).set(i, true); // On peut donc placer cette reine(x;y) et on le fait
setQueen(nb_queens-1, chessboard, i, (z+1 >= WIDTH) ? 0 : z+1, solutions);
chessboard.get(z).set(i, false);
}
}
}
}
해결책을 찾을 수 있습니까? 결과로 얻는 것은 무엇입니까? 또한 isAQueenAlreadyPresent (i, z, chessboard)를 넣으면 문제가되지 않지만 누가 알 수 있습니다. 또한 재귀와 반복을 모두 사용하는 것은 유용하지 않습니다. – Asoub
결과를 표시하기 위해 OP를 편집했습니다 :) –
아, 이제 저는 재귀와 반복 과정을 볼 수 있습니다. 하지만 실제로 많은 결과가 부족한 것 같아요. 이런 솔루션의 대칭 적이 지요? && Q && & & Q &는 첫 번째 결과와 대칭입니다. – Asoub