//一个变化问题,要输出指定的皇后序列
//注释里的那段代码效率比较低
//去掉m变量就是n皇后问题
#include<iostream>
using namespace std;
int n=8,m;
int c[10];
int vis[10][100];
void dfs(int cur)
{
if(cur==n && (m--==1) )
{
for(int i=0;i<n;i++) cout<<c[i]+1;cout<<endl;
}
// else for(int i=0;i<n;i++)
// {
// int ok=1;
// c[cur]=i;
// for(int j=0;j<cur;j++)
// {
// if(c[cur]==c[j] || cur-c[cur]==j-c[j] || cur+c[cur]==j+c[j])
// {
// ok=0;break;
// }
// }
// if(ok)
// {
// dfs(cur+1);
// }
// }
else for(int i=0;i<n;i++)
{
if(!vis[0][i] && !vis[1][cur+i] && !vis[2][cur-i+n])
{
c[cur]=i; //如果不用打印,整个c数组都可以省略
vis[0][i] = vis[1][cur+i] = vis[2][cur-i+n] = 1;//修改全局变量
dfs(cur+1);
vis[0][i] = vis[1][cur+i] = vis[2][cur-i+n] = 0;
}
}
}
int main()
{
while(cin>>m)
{
dfs(0);
}
return 0;
}
05-24