不预处理会超时。。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int map[11];
int n;
int sum;
int ans[11];
void dfs(int line) {
if(line == n + 1) {
sum++;
return;
}
int i, j;
int flag;
for(i = 1; i <= n; i++) {
map[line] = i;
flag = 1;
for(j = 1; j < line; j++) {
if(map[j] == i || map[j] + j == map[line] + line || map[j] - j == map[line] - line) {
flag = 0;
break;
}
}
if(flag) dfs(line + 1);
}
}
int main() {
int i;
for(i = 1; i <= 10; i++) {
sum = 0;
n = i;
memset(map, 0, sizeof(map));
dfs(1);
ans[i] = sum;
}
int N;
while(~scanf("%d", &N) && N ) {
printf("%d\n", ans[N]);
}
return 0;
}