输入数据
第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数b(1 <= b <= 92)
输出要求
n行,每行输出对应一个输入。输出应是一个正整数,是对应于b的皇后串
输入样例
2
1
92
输出样例
15863724
84136275
代码如下
#include<iostream>
#include<cmath>
using namespace std;
int f[10];
int num=0;
int step[10]={0};
int check(int k);
void find1(int k);
int main()
{
for (int i=0;i<8;i++)
f[i]=-1;
find1(0);
cout<<num;
return 0;
}
void find1(int k)//八重搜索 ,带有回溯的深搜
{
for (int i=0;i<8;i++)
{
f[k]=i;
if (check(k)==1)
{
step[k]=i;
if (k!=7)find1(k+1);
else {
num++;
for (int j=0;j<8;j++)
cout<<step[j];
cout<<endl;
}
}
}
}
int check(int k)//条件检测
{
int i;
for (i=0;i<k;i++)
{
if (abs(f[i]-f[k])==abs(i-k)||f[i]==f[k])
return 0;//判断是否满足条件,不满足则返回0;
}
return 1;//满足条件
}