```cpp
#include <cstdio>
int sum = 0;
int cnt = 0;
int abs(int);
void queen(int *, int);
int check(int *, int);
int main()
{
int size;
scanf("%d", &size);
int *ptr = new int[size];
queen(ptr, size);
printf("%d\n", sum);
delete ptr;
return 0;
}
int abs(int input)
{
return input > 0 ? input : -input;
}
int check(int *ptr, int n)
{
for (int i = 0; i < n; i++){
if (*(ptr + i) == *(ptr + n) || abs(*(ptr + i) - *(ptr + n)) == abs(i - n))
return 0;
}
return 1;
}
void queen(int *ptr, int max)
{
for (int i = 0; i < max; i++)
*(ptr + i) = 0;
int k = 0;
while (k >= 0){
*(ptr + k) = *(ptr + k) + 1;
while (*(ptr + k) <= max && !check(ptr, k))
*(ptr + k) = *(ptr + k) + 1;
if (*(ptr + k) <= max && k < max - 1)
k++;
else if (*(ptr + k) <= max && k == max - 1)
{
if (cnt < 3)
{
printf("%d", *ptr);
for (int i = 1; i < max; i++)
printf(" %d", *(ptr + i));
printf("\n");
cnt++;
}
sum++;
}
else
{
*(ptr + k) = 0;
k--;
}
}
}
```
by AzusidNya @ 2018-01-14 12:39:56
。。。。。。
by 倾城ファン恋 @ 2018-01-26 21:57:29
剪枝,否则过不了
by panzeyu2013 @ 2018-02-05 12:59:14