public class exer620{
public static void main(String[] args){
int[] queen;
queen = new int[8];
putIt(queen,0);
}
public static void putIt(int[] numf,int mf){
if(mf == 8){//当递归完成时
display(numf);
System.out.print("\n\n");
}
else{
for(int j = 0;j < 8;j++)
{
if(findInArray(numf,mf,j) || isDiagonal(numf,mf,j))
continue;
else{
numf[mf] = j;
putIt(numf,mf+1);
}
}
}
}
public static boolean findInArray(int[] numf,int mf,int nf){
//判断是否在同一行上
for(int i = 0;i < mf;i++){
if(nf == numf[i])
return true;
}
return false;
}
public static boolean isDiagonal(int[] numf,int mf,int nf){
//判断是否在同一对角线上
for(int i = 0;i < mf;i++){
if(((mf - i) * (mf - i)) == ((nf - numf[i]) * (nf - numf[i])))
return true;
}
return false;
}
public static void display(int[] numf){//显示每一行
for(int u:numf){
for(int i = 0;i < u;i++){
System.out.print("[ ]");
}
System.out.print("[X]");
for(int i = 0;i < 7 - u;i++){
System.out.print("[ ]");
}
System.out.print("\n");
}
}
}
原理非常简单,每行放置一个皇后。 然后放下一行,判断与之前放置的皇后是否冲突。