N皇后问题。
深搜。
#include<stdio.h>
#include<math.h>
int x[16],y[16];
int n, num;
bool isPlace(int a){
for(int i = 1; i < a; i++)
if(fabs(a - i) == fabs(x[a] - x[i]) || x[a] == x[i])
return false;
return true;
}
void dfs(int a){
if(a > n)
num ++;
else
for(int i = 1; i <= n; i++){
x[a] = i;
if(isPlace(a))
dfs(a+1);
}
}
int main(){
for(int i = 1; i <= 10; i++){
num = 0;
n = i;
dfs(1);
y[i] = num;
}
int k;
while(~scanf("%d", &k),k){
printf("%d\n",y[k]);
}
return 0;
}