版权声明:本文纯属作者口胡,欢迎转载 https://blog.csdn.net/TQCAI666/article/details/85721869
https://www.luogu.org/problemnew/show/P1219
TLE代码
#include <bits/stdc++.h>
#define FF(a,b) for(int a=0;a<b;a++)
#define LEN 20
using namespace std;
int N;
int x[LEN];
int ans=0;
bool legal(int *a,int n){
map<int,bool> exist_p_diag,exist_n_diag;
for(int i=1;i<=n;i++){
int p_diag=i-a[i];
int n_diag=i+a[i];
if(exist_p_diag[p_diag])
return 0;
else
exist_p_diag[p_diag]=true;
if(exist_n_diag[n_diag])
return 0;
else
exist_n_diag[n_diag]=true;
}
return 1;
}
void backtrack(int t) {
if (t > N){
ans++;
if(ans<=3) {
for (int i = 1; i <= N; i++) {
printf("%d", x[i]);
if (i != N)
putchar(' ');
}
puts("");
}
}else
for (int i = t; i<=N; i++){
swap(x[t], x[i]);
if(legal(x,t)) backtrack(t+1);
swap(x[t], x[i]);
}
}
int main(){
// freopen("../in","r",stdin);
FF(i,LEN) x[i]=i;
cin>>N; //N∈[6, 13]
backtrack(1);
cout<<ans<<endl;
}
大佬们的代码
https://www.luogu.org/problemnew/solution/P1219