📄 eight_queens.java
字号:
public class Eight_queens{
static int count=0;
static Queen q=new Queen();
public static void main (String[] args) {
SetQueen(0);
}
static void SetQueen(int i){
for(int j=0;j<=7;j++){
if(q.isSafe(i,j)){//确定对角线和该列无皇后即可放置在该位置
q.set(i,j);
if(i<7) SetQueen(i+1);//递归调用setqueen
else {
count++;
System.out.println("Solution NO."+count+":");
q.display();//将该情形显示出来
System.out.println();
}
q.take(i,j);
}
}
}
}
class Queen{
boolean [][]queen=new boolean[8][8];
boolean []diag1=new boolean[15];//用于判断主对角线是否有皇后的矩阵
boolean []diag2=new boolean[15];//用于判断次对角线是否有皇后的矩阵
boolean []col=new boolean[8];//用于判断同一列是否有皇后的矩阵
Queen(){ //构造函数,初始化棋盘矩阵和各判定矩阵。
for(int i=0;i<15;i++){
for(int j=0;j<8;j++){
if(i<8)
queen[i][j]=true;
}
diag1[i]=diag2[i]=true;
if(i<8) col[i]=true;
}
}
public boolean isSafe(int i,int j){
if(diag1[i-j+7]&&diag2[i+j]&&col[j])
return true;
else
return false;
}
void set(int i,int j){
queen[i][j]=false;
diag1[i-j+7]=diag2[i+j]=col[j]=false;
}
void take(int i,int j){
queen[i][j]=true;
diag1[i-j+7]=diag2[i+j]=col[j]=true;
}
void display(){
for(int i=0;i<=7;i++){
System.out.print("( ");
for(int j=0;j<=7;j++)
if(queen[i][j]) System.out.print("Q ");
else System.out.print("* ");
System.out.print(")");
System.out.println();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -