package com.ls.demo;
import java.util.Arrays;
public class Queen {
public static void main (String [] args){
Test1 a=new Test1();
a.search(0);
System.out.println("八皇后问题共有:"+a.result+"种可能");
}
}
class Test1{
//定义- 一个二元数组,用来存放64个皇后放的位置
public int [][]array = new int[8][8];
//记录皇后个数
public int count=8;
//记录结果
public int result;
//排除行、列、对角线
public boolean excited(int arry[][],int k,int j){
//排除行列
for(int i=0;i<=7;i++){
if(arry[i][j]==1){
return false;
}
}
//排除左对角线
for(int m=k-1,n=j-1;m>=0&&n>=0;m--,n--){
if (arry[m][n]==1){
return false;
}
}
//排除右对角线
for(int i=k-1,w=j+1;i>=0&&w<=7;i--,w++){
if (arry[i][w]==1){
return false;
}
}
return true;
}
//深度搜索
public void search(int i){
//寻找皇后节点
if(i>7){//8皇后解
result++;
print();
return;
}
for(int m=0;m<8;m++){ //深度优先,递归算法
if(excited(array,i,m)){
array[i][m]=1;
search(i+1);
array[i][m]=0;
}
}
}
public void print(){ //打印方法结果
System.out.println("方案"+result+":");
for(int i=0;i<8;i++){
for(int m=0;m<8;m++){
if(array[i][m]==1){
System.out.print(Arrays.asList(array[i][m]));
}else{
System.out.print(Arrays.asList(array[i][m]));
}
}
System.out.println();
}
System.out.println();
}
}