在棋盘上放置皇后,使她们不在同行,同列,同对角线。
1.首先每行只能放置一个皇后,保证行之间互不攻击,因此只需要检查纵向与斜向
private static boolean isPrime(int[] a, int k) {
for (int i = 0; i < k; ++i) {//与已经放置的皇后比较是否在同一列a[i]中的数为列号
if (a[i] == a[k] || Math.abs(i - k) == Math.abs(a[i] - a[k])) { //检查是否同列同对角线
return true;
}
}
return false;
}
2. 判断是否放置成功的条件是是否到达最后一列,并且放置成功
import java.util.Scanner;
public class Nking {
private static int n;
private static int sum=0;
private static int []a=new int[30];
private static void put(int k) {
if(k==n){
++sum;
return;
}
for(int i=0;i<n;++i){
a[k]=i; //当递归判断失败,a[k]等于下一个位置
boolean ok=true;
for(int j=0;j<k;++j){
if(a[j]==a[k]|| Math.abs(j-k)== Math.abs(a[j]-a[k])){
ok=false;
}
}
if(ok){
put(k+1);
}
}
}
public static void main(String[] args) {
Scanner inputInt=new Scanner(System.in);
n=inputInt.nextInt();
put(0);
System.out.println(sum);
}
}