直接上代码吧,经测试,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); } } } } }