나는 약간의 비틀어서 N*N
퀸 알고리즘을 구현하려고합니다. 이 버전에서 여왕은 기사처럼 움직일 수 있습니다 ...좌표를 얻는 N * N 여왕 알고리즘
모든 것이 잘 작동하지만 모든 가능한 해결책의 좌표를 얻으려고합니다. 문제는 내가 그것을 col == n
안에 넣으면 단지 마지막 것을 인쇄한다는 것입니다. 이 문제를 해결하는 방법에 대한 아이디어가 있습니까?
static void placement(int col, int queens[], int n){
//int solution =0;
for (int row = 1; row <= n; row++) {
queens[col] = row;
if((check_Queen(row,col,queens)) == true)
{
if((check_KnightMove(row,col,queens)) == true)
{
if(col == n)
{
System.out.println("("+row + "," + col);
System.out.println("solution=" + solution);
solution++;
}
else
{
placement(col+1,queens,n);
}
}
}
}
queens[col] = 0;
}
public static void main(String[] args) {
int solution =0;
Scanner scanner=new Scanner(System.in);
System.out.print("Please enter N");
int n = scanner.nextInt();// TODO Auto-generated method stub
int queens[] = new int[n+1];
placement(1,queens,n);
System.out.println("nQueens: solution=" + solution);
}
static boolean check_Queen(int row, int col, int queens[])
{
//boolean flag = false;
for(int i =1; i<col; i++)
{
if (queens[col-i] == row ||
queens[col-i] == row-i ||
queens[col-i] == row+i) {
//flag = false;
return false;
}
}
return true;
}
static boolean check_KnightMove(int row, int col, int queens[])
{
if(col>=2&&(queens[col-2] == (row -1) || queens[col-2] == (row+1) || queens[col-1] == (row-2) || queens[col-1] == (row+2)))
{
return false;
}
return true;
}
}
어쩌면 마지막 n 개의 솔루션을 저장하는 배열입니까? – user1665569