1214:八皇后
首先通过 八皇后问题 求解出所有的结果,然后将每一个结果转化为一个八位的整数(算是本题的一个亮点吧)
将这些八位的整数集进行排序,然后依据输入输出相应的答案。
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 using namespace std; 5 6 const int N=10; 7 int a[N],ans[100],sum; 8 void print(){ 9 int res=0; 10 for(int i=1;i<=8;i++){ 11 for(int j=1;j<=8;j++) 12 if(a[j]==i){ 13 res=res*10+j; 14 break; 15 } 16 } 17 ans[sum++]=res; 18 } 19 bool check(int x,int d){ 20 for(int i=1;i<d;i++){ 21 if(a[i]==x||x-a[i]==d-i||x-a[i]==i-d) 22 return 0; 23 } 24 return 1; 25 } 26 void solve(int d){ 27 if(d==9){ 28 print(); 29 return; 30 } 31 for(int i=1;i<=8;i++){ 32 if(check(i,d)){ 33 a[d]=i; 34 solve(d+1); 35 } 36 } 37 } 38 bool compare(int x,int y){ 39 return x<y; 40 } 41 int main(){ 42 solve(1); 43 sort(ans,ans+sum,compare); 44 int n,t; 45 cin>>n; 46 while(n--){ 47 cin>>t; 48 cout<<ans[t-1]<<endl; 49 } 50 return 0; 51 }
额外收获:
- 可以为sort函数(来自头文件algorithm)指定一个函数实参,排序的顺序(正序、逆序)依据这个函数