#include <stdio.h>
#include <malloc.h>
int queen(int n)
{
int *q = (int *)malloc(sizeof(int) * (n + 1));
int i, j, num = 0;
for (q[0] = 0, i = 1; i < n + 1; ++i)
q[i] = 1;
i = 1;
while ((q[1] <= n / 2) || ((n % 2) && (q[2] < n / 2)))
{
if (i > n)
{
printf("\n第%d种可行的情况是:\n", ++num);
for (j = 1; j < i; ++j)
printf("在第%d行,把棋放在第%d位。\n", j, q[j]);
printf("\n第%d种可行的情况是:\n", ++num);
for (j = 1; j < i; ++j)
printf("在第%d行,把棋放在第%d位。\n", j, n - q[j] + 1);
if (num % 10 == 0)
getchar();
++(q[--i]);
}
else
{
for (j = 1; j < i; ++j)
if ((q[i] == q[j]) || ((q[i] - q[j]) == (i - j)) || ((q[i] - q[j]) == (j - i)))
{
++(q[i]);
j = 0;
}
if (q[i] > n)
{
q[i] = 1;
++(q[--i]);
}
else
++i;
}
}
free(q);
return num;
}
int main (void)
{
puts("请输入n的大小:");
int n;
scanf("%d", &n);
getchar();
printf("\n\n一共有%d种可能情况,已全部列出!\n", queen(n));
getchar();
return 0;
}





