n-queen是回溯法的一个典例,算法在书中介绍的很详细,主要就是逐层往下尝试,不合适则后退一层。再次申明,算法来源《算法导论》。
public class queen8 {
public static void NQueens(int n) {
int[] X = new int[n+1];
X[0] = 0;
int k = 1;
while(k > 0) {
X[k] = X[k] + 1;
while(X[k] <= n && Place(X,k) != true) {
X[k] = X[k] + 1;
}
if(X[k] <= n) {
if(k == n) {
for(int i=1;i<n+1;i++)
System.out.print(X[i]+" ");
System.out.println();
}
else {
k++;
X[k] = 0;
}
}
else k--;
}
}
public static boolean Place(int[] X,int k) {
int i = 1;
while(i<k) {
if(X[i] == X[k] || Math.abs(X[i] - X[k]) == Math.abs(i-k))
return false;
i++;
}
return true;
}
public static void main(String[] args) {
NQueens(8);
}
}