Queen’s Eight Questions (recursive)
How can I place eight queens on an 8×8 international chessboard such that no queen can directly eat another queen? To achieve this goal, no two queens can be the sameRun, run、verticalorcurved linebosses.
public class EightQueen {
public static int count=0;
public static boolean noDanger(int row,int col,int chess[][]) {
for(int i=0;i<8;i++) {
if(chess[i][col]==1)
return false;
}
for(int i=1;row-i>=0&&col-i>=0;i++) {
if(chess[row-i][col-i]==1)
return false;
}
for(int i=1;row+i<8&&col-i>=0;i++) {
if(chess[row+i][col-i]==1)
return false;
}
for(int i=1;row-i>=0&&col+i<8;i++) {
if(chess[row-i][col+i]==1)
return false;
}
for(int i=1;row+i<8&&col+i<8;i++) {
if(chess[row+i][col+i]==1)
return false;
}
return true;
}
public static void EQueen(int row,int col,int chess[][]) {
int chess2[][];
chess2 = chess.clone();
if(row == 8) {
count++;
System.out.println(""+count+"Добрый");
for(int i=0;i<row;i++) {
for(int j=0;j<col;j++) {
System.out.print(chess2[i][j]+" ");
}
System.out.println();
}
}
else{
for(int j=0;j<col;j++) {
if(noDanger(row,j,chess2)) {
chess2[row][j] = 1;
EQueen(row+1,col,chess2);
}
chess2[row][j] = 0;
}
}
}
public static void main(String[] args) {
int chess[][] = new int[8][8];
EQueen(0,8,chess);
}
}
Another way to judge the slope in a solution is the Nodganger function:
int plus = row+col;
int minus = row-col;
for(int i=0;i<8;i++) {
for(int j=0;j<8;j++) {
if(i+j==plus&&chess[i][j]==1)
return false;
if(i-j==minus&&chess[i][j]==1)
return false;
}
}
return true;