woscxk @ 2024-05-22 12:49:37
rt
#include<bits/stdc++.h>
using namespace std;
bool check(int m[],int s){
bool b[14]={};
for(int i=0;i<s;i++){
if(b[i])return 0;
else b[i]=1;
}for(int i=0;i<s;i++){
for(int j=i+1;j<s;j++){
if(abs(m[i]-m[j])==abs(i-j))return 0;
}
}return 1;
}
int main(){
int m[20]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19},n,fac=1;
cin>>n;
int cnt=0;
for(int i=n;i>=1;i--)fac*=i;
for(int i=0;i<fac;i++){
if(check(m,n)){
if(cnt<3){
for(int i=0;i<n;i++){
cout<<m[i]<<" ";
}
cout<<'\n';
}cnt++;
}
next_permutation(m,m+n);
}
cout<<cnt;
}
by J_Kobe @ 2024-05-22 13:06:27
@woscxk 你的搜索里为什么要用两重循环啊,这样就会超时啊。
by Fryderyk_Chopin @ 2024-05-22 13:10:23
@woscxk 用回溯
by woscxk @ 2024-05-22 13:39:16
那怎么优化啊qwq