复杂度为N*N!
n=13的时候跑不过了。。
哪里可以优化下啊
#include<bits/stdc++.h>
using namespace std;
int col[15];
int n;
long long tot;
bool check(int c,int r){ //检查冲突
for(int i=0;i<r;i++){
if(col[i]==c||(abs(col[i]-c)==abs(i-r))) return 0;
}
return 1;
}
void dfs(int r){ //一行行放皇后
if(r==n){
tot++;
if(tot<4){
for(int i=0;i<n;i++) printf("%d ",col[i]+1);
printf("\n");
}
return;
}
for(int c=0;c<n;c++){ //在每一列放皇后
if(check(c,r)){ //检查是否合法
col[r]=c;
dfs(r+1); //继续下一行
}
}
}
int main(void){
scanf("%d",&n);
/* if(n==13){
printf("1 3 5 2 9 12 10 13 4 6 8 11 7\n1 3 5 7 9 11 13 2 4 6 8 10 12\n1 3 5 7 12 10 13 6 4 2 8 11 9\n73712");
return 0;
}*/
dfs(0);
printf("%lld",tot);
return 0;
}