#include <stdio.h> //http://poj.grids.cn/practice/2754
#include <string.h>
int qq[100];
void deal(bool flag[][8])
{
static int num=0;
num++;
int sum=0;
for(int i=0;i<=7;i++)
for(int j=0;j<=7;j++)
if(flag[i][j])
sum=10*sum+j+1;
qq[num]=sum;
}
bool judge(bool flag[][8],int m,int n) //第 m 行,n列
{
for(int i=0;i<=7;i++)
{
if(flag[m][i])
return 0;
if(flag[i][n])
return 0;
}
for(int i=m,j=n; i>=0 && j>=0;i--,j--)
{
if(flag[i][j])
return 0;
}
for(int i=m,j=n;i<=7 && j<=7 ;i++,j++)
{
if(flag[i][j])
return 0;
}
for(int i=m,j=n;i>=0 && j<=7;i--,j++)
{
if(flag[i][j])
return 0;
}
for(int i=m,j=n;i<=7 && j>=0;j--,i++)
{
if(flag[i][j])
return 0;
}
return 1;
}
void dfs(bool flag[][8],int cur)
{
if(cur==8)
{
deal(flag);
return ;
}
else
{
for(int i=0;i<8;i++)
{
if(judge(flag,cur,i))
{
flag[cur][i]=1;
dfs(flag,cur+1);
flag[cur][i]=0;
}
}
}
}
int main()
{
bool flag[8][8];
memset(flag,0,sizeof(flag));
dfs(flag,0);
int n;
int t;
scanf("%d",&t);
while(t--)
{scanf("%d",&n);
printf("%d\n",qq[n]);
}
return 0;
}
八皇后
最新推荐文章于 2025-05-09 02:06:38 发布