思路 : 假设已经放好了k-1个皇后 现在放第k个
#include <stdio.h>
#include <math.h>
#define N 8
int s[93][N]; //全局变量 不用反复传参
int buf[N]; //暂时存放数据,如果直接用二维数组存储的话代码不易阅读且易出错
int q = 0; //第n-1个数据
void equeen(int cur)
{
int i, j;
if(cur == N ) //递归终止条件
{
for( int i=0; i<N; i++ ) s[q][i] = buf[i]; //存储
q++;
return;
}
else
{
for( i=1; i<=N; i++)
{
for( j=0; j<cur; j++)
if(buf[j] == i || abs(buf[j]-i) == abs(j-cur) ) break; //不同列与不同对角线
if(j==cur)
{
buf[cur] = i; //符合要求则放置皇后
equeen(cur+1); //放置下一个位置
}
}
}
}
int main()
{
equeen(0);
int t, n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=0; i<8; i++) printf("%d",s[n-1][i]);
printf("\n");
}
return 0;
}