具体代码如下
/**
* 穷举法解八皇后问题
* @author Administrator
*
*/
public class EightQueue {
public static void main(String[] args) {
int num=0;
int[] a=new int[8];
for(a[0]=0;a[0]<8;a[0]++){
for(a[1]=0;a[1]<8;a[1]++){
if(isConflict(1,a[1],0,a[0]))
continue;
for(a[2]=0;a[2]<8;a[2]++){
if(isConflict(2,a[2],0,a[0])||isConflict(2,a[2],1,a[1]))
continue;
for(a[3]=0;a[3]<8;a[3]++){
if(isConflict(3,a[3],0,a[0])||isConflict(3,a[3],1,a[1])||isConflict(3,a[3],2,a[2]))
continue;
for(a[4]=0;a[4]<8;a[4]++){
if(isConflict(4,a[4],0,a[0])||isConflict(4,a[4],1,a[1])||isConflict(4,a[4],2,a[2])||isConflict(4,a[4],3,a[3]))
continue;
for(a[5]=0;a[5]<8;a[5]++){
if(isConflict(5,a[5],0,a[0])||isConflict(5,a[5],1,a[1])||isConflict(5,a[5],2,a[2])||isConflict(5,a[5],3,a[3])||isConflict(5,a[5],4,a[4]))
continue;
for(a[6]=0;a[6]<8;a[6]++){
if(isConflict(6,a[6],0,a[0])||isConflict(6,a[6],1,a[1])||isConflict(6,a[6],2,a[2])||isConflict(6,a[6],3,a[3])||isConflict(6,a[6],4,a[4])||isConflict(6,a[6],5,a[5]))
continue;
for(a[7]=0;a[7]<8;a[7]++){
if(isConflict(7,a[7],0,a[0])||isConflict(7,a[7],1,a[1])||isConflict(7,a[7],2,a[2])||isConflict(7,a[7],3,a[3])||isConflict(7,a[7],4,a[4])||isConflict(7,a[7],5,a[5])||isConflict(7,a[7],6,a[6]))
continue;
num++;
System.out.print("第"+num+"种放法:");
print(a);
}
}
}
}
}
}
}
}
}
/**
* 判断两个格子的皇后是否冲突
* @param row1
* @param col1
* @param row2
* @param col2
* @return
*/
public static boolean isConflict(int row1,int col1,int row2, int col2){
if(col1==col2)//在同一列,有冲突
return true;
if(row1-row2==col1-col2)//在和主对角线平行的斜线上,有冲突
return true;
if(row1+col1==row2+col2)//在和副对角线平行的斜线上,有冲突
return true;
return false;
}
public static void print(int[] a){
for(int i=0;i<a.length;i++){
System.out.print("("+i+","+a[i]+")");
}
System.out.println();
}
}