八皇后以及N皇后问题:
public class EightQueens {
static int b[]={0,0,0,0,0,0,0,0};
static int sum=0;
static int times=1;
public static void main(String[] args){
search(0);
System.out.println("一共有"+sum+"个结果。");
}
/**
* 搜索指定行
* @param row
*/
private static void search(int row){
if(row==8){
sum++;
printResult();
return;
}
for(int i=0;i<8;i++){
if(check(row,i)){ //从下标为0行0列的元素开始进行验证
search(row+1);
}
}
}
/**
* 检查m,n 这个位置是否冲突
*/
private static boolean check(int row,int col){
for(int i=0;i<row;i++){
if(b[i]==col){
return false;
}
if((b[i]+i)==(row+col)){
return false;
}
if((b[i]-i)==(col-row)){
return false;
}
}
b[row]=col;
return true;
}
/**
* 打印结果
*/
private static void printResult(){
int a=times;
if(a < 4){
System.out.println("第" + times++ + "种结果是:");
for(int j=0;j<8;j++){
for(int i=0;i<8;i++){
if(b[i]==b[j]){ //让它自己跟自己比,从而得到可以输出Q的位置
System.out.print("Q" + " ");
}else{
System.out.print("X" +" ");
}
}
System.out.println(" ");
}
System.out.println(" ");
}
}
}
运行结果: