//http://acm.hdu.edu.cn/showproblem.php?pid=2553
//JAVA代码
import java.util.Scanner;
import java.util.concurrent.ConcurrentHashMap;public class nQueen {
static int n;
static int count;
static int num[]=new int[21];
static boolean place(int j){
for(int i=0;i<j;i++){
if(num[i]==num[j]||Math.abs(num[i]-num[j])==Math.abs(i-j)){
return false;
}
}
return true;
}
static void search(int i){
if(i==n){
count++;
return;
}else{
for(int j=0;j<n;j++){
num[i]=j;
if(place(i)){
search(i+1);
}
}
}
}
public static void main(String[] args){
Scanner inScanner=new Scanner(System.in);
System.out.println("请输入皇后的个数:");
while(inScanner.hasNext()){
count=0;
n=inScanner.nextInt();
int begin=(int)System.currentTimeMillis();
search(0);
System.out.println("共有 "+count+" 种");
int end=(int)System.currentTimeMillis();
System.out.println("用时:"+(end-begin));
}
}
}
//C代码
#include <stdio.h>
#include<math.h>
#include <stdlib.h>
int num[11];
int count;
int n;
int place(int j){
int i;
for(i=0;i<j;i++){
if(num[i]==num[j]||abs(num[i]-num[j])==abs(i-j)){
return 0;
}
}
return 1;
}
int search(int i){
if(i==n)
count++;
else{
int j;
for(j=0;j<n;j++){
num[i]=j;
if(place(i)){
search(i+1);
}
}
}
return count;
}
int main(){
int sum[11],m;
for(n=1;n<=10;n++){
count=0;
sum[n]=search(0);
}
while(scanf("%d",&m)!=EOF&&m!=0){
printf("%d\n",sum[m]);
}
}