思路就是每放一个就检查一遍和之前已经放的是否有冲突,然后最后一个TLE了
#include<bits/stdc++.h>
using namespace std;
int a[15];
int n, ans = 0;
void dfs(int k){
if(k > n) {
ans++;
if(ans <= 3){
for(int i = 1; i <= n; i++)
printf("%d ", a[i]);
puts("");
}
return;
}
for(int i = 1; i <= n; i++){
if(k == 1) {a[k] = i; dfs(k+1);}
else{
a[k] = i;
/*printf("%d-", k);
for(int i = 1; i <= n; i++)
printf("%d ", a[i]);
puts("");
*/
int flag = 1;
for(int j = 1; j < k; j++)
if(a[k] == a[j] || a[k]+k == a[j]+j || a[k]-k+n == a[j]-j+n ) {flag = 0; break;}
if(flag) dfs(k+1);
a[k] = 0;
}
}
}
int main(){
scanf("%d", &n);
dfs(1);
printf("%d", ans);
return 0;
}