直接上代码吧,经测试,8皇后时候的答案是92个。
public class EightQueen {
/**
* @param args
*/
//hits表示有多少个结果
public static int hits = 0;
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] Queen = new int[8];
findQueen(0,Queen);
System.out.print(hits);
}
//Queen[i] = j表示的是在数组的第i行,第j列的位置放置皇后
//得到Queen数组后便可以轻松求出每个皇后的位置
public static void findQueen(int curLine, int[] Queen){
int len = Queen.length;
if(curLine == len ){
hits++;
}else {
//这里看如果把皇后试探性的放在每一列,是否能够符合要求。
for(int i = 0; i < len; i++ ){
boolean canPut = true;
Queen[curLine] =i ;
for(int j = 0; j < curLine;j++){
//看看放在某一列时候,是否在这一行之前的皇后,与这一行有冲突
if(Queen[curLine] == Queen[j]||Queen[curLine]- Queen[j] == curLine - j||
Queen[curLine]- Queen[j] == j - curLine
){
canPut = false;
break;
}
}
//如果能够符合要求,接着进行递归
if(canPut){
findQueen(curLine + 1, Queen);
}
}
}
}
}