package com.shiyan1;
public class EightQ {
public static void main(String[] args) {
EightQ queen=new EightQ();
}
public static int countNum=0;//方案数
public static int queenNum=8;//皇后数(矩阵行列数)
public static int cols[]=new int[queenNum];//定义摆法
public EightQ(){
getArrangement(0);
//System.out.println("/n");
System.out.println(queenNum+"皇后问题有"+countNum+"摆法!");
}
private void getArrangement(int n) {
// TODO Auto-generated method stub
//遍历该列所有不合法的行,并用rows数组记录,不合法记row[i]=true;
boolean rows[]=new boolean[queenNum];
for(int i=0;i<n;i++){
rows[cols[i]]=true;
int d=n-i;
if(cols[i]-d>=0){
rows[cols[i]-d]=true;
}
if(cols[i]+d<=queenNum-1){
rows[cols[i]+d]=true;
}
}
for(int i=0;i<queenNum;i++){
//判断该行是否合法
if(rows[i])
continue;
//设置当前列合法棋子所在行数
cols[n]=i;
//当前列不为最后一列时
if(n<queenNum-1){
getArrangement(n+1);
}else{
//累计方案个数
countNum++;
//打印棋盘信息
printChessBoard();
}
}
}
private void printChessBoard() {
// TODO Auto-generated method stub
System.out.println("第"+countNum+"种走法");
for(int i=0;i<queenNum;i++){
for(int j=0;j<queenNum;j++){
if(i==cols[j]){
System.out.print("Q");
}else{
System.out.print("*");
}
//System.out.print("/n");
}
}
}
}