八皇后问题,是用递归方法,下面的实现方案比较简洁。注意细节,用户的输入是从1开始的。
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
int ans[92][8] = {0};
int newTry[8] = {0};
int count = 0;
void getAllAns(int i)
{
if(i == 8)
{
for(int m = 0;m < 8;m++)
ans[count][m] = newTry[m] + 1;
count++;
return;
}
for(int k = 0;k < 8;k++)
{
int j;
for(j = 0;j < i;j++)
{
if(k == newTry[j] || (i - j) == (newTry[j] - k) || (j - i) == (newTry[j] - k))
break;
}
if(j == i)
{
newTry[i] = k;
getAllAns(i + 1);
}
}
}
int main()
{
getAllAns(0);
int num;
scanf("%d",&num);
while(num--)
{
int n;
scanf("%d",&n);
for(int i = 0;i < 8;i++)
printf("%d",ans[n - 1][i]);
printf("\n");
}
return 0;
}