八皇后问题

匿名 (未验证) 提交于 2019-12-03 00:15:02

Description


对于某个满足要求的8皇后的摆放方法,定义一个皇后串a与之对应,即a=b1b2...b8,其中bi为相应摆法中第i行皇后所处的列数。已经知道8皇后问题一共有92组解(即92个不同的皇后串)。
给出一个数b,要求输出第b个串。串的比较是这样的:皇后串x置于皇后串y之前,当且仅当将x视为整数时比y小。

Input

第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数b(1 <= b <= 92)

Output

输出有n行,每行输出对应一个输入。输出应是一个正整数,是对应于b的皇后串。

Sample Input

3 6 4 25

Sample Output

25713864 17582463 36824175

 1 #include <stdio.h>  2 #include <string.h>  3 #include <iostream>  4 #include <string>  5 #include <math.h>  6 #include <algorithm>  7 #include <vector>  8 #include <stack>  9 #include <queue> 10 #include <set> 11 #include <map> 12 #include <sstream> 13 const int INF=0x3f3f3f3f; 14 typedef long long LL; 15 const int mod=1e9+7; 16 //const double PI=acos(-1); 17 #define Bug cout<<"---------------------"<<endl 18 const int maxn=1e5+10; 19 using namespace std; 20  21 int vis[10]; 22 int A[10]; 23 int ans[93][10]; 24 int cnt=0; 25  26 int judge(int n) 27 { 28     int flag=1; 29     for(int i=1;i<=n;i++) 30     { 31         for(int j=1;j<=n;j++) 32         { 33             if(i!=j&&abs(i-j)==abs(A[i]-A[j]))  //别忘了i!=j  34                 flag=0; 35         } 36     } 37     return flag; 38 } 39  40 void dfs(int p,int n) 41 { 42     A[n]=p; 43     if(judge(n)==0) 44         return ; 45     if(n==8) 46     { 47         cnt++; 48         for(int k=1;k<=8;k++) 49             ans[cnt][k]=A[k];  //第一次写成ans[++cnt][k]=A[k]了。。。  50         return ; 51     } 52     for(int i=1;i<=8;i++) 53     { 54         if(vis[i]==0) 55         { 56             vis[i]=1; 57             dfs(i,n+1); 58             vis[i]=0; 59         } 60     } 61 } 62  63 int main() 64 { 65     for(int i=1;i<=8;i++) 66     { 67         vis[i]=1; 68         dfs(i,1); 69         vis[i]=0; 70     } 71     int T; 72     scanf("%d",&T); 73     while(T--) 74     { 75         int n; 76         scanf("%d",&n); 77         for(int i=1;i<=8;i++) 78             printf("%d",ans[n][i]); 79         printf("\n"); 80     } 81     return 0; 82 }

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!