C++版本,最多不超过20个
#include<stdio.h>
#include<stdlib.h>
int check(int number,int a[],int i)
{
int k=0;
for(;k<number;k++)
{
if(a[k]==i||abs(i-a[k])==abs(k-number))
{
return -1;
}
}
return 1;
}
void exp(int a[],int number ,int n,int &count)
{
if(number==n)
{
count++;
printf("%d\n",count);
for(int i=0;i<n;i++)
{
for(int k=0;k<n;k++)
{
if(a[i]==k)
{
printf("Q");
}
else
{
printf("*");
}
}
printf("\n");
}
printf("\n\n");
}
if(number<n)
{
int i=0;
while(i<n)
{
int tag=check(number,a,i);
if(tag==1)
{
a[number]=i;
exp(a,number+1,n,count);
}
i++;
}
}
}
int main()
{
fflush(stdin);
int N;
scanf("%d",&N);
int a[N]={0};
int count=0;
exp(a,0,N,count);
}