#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 50
typedef int bool;
#define true 1
#define false 0
int n;
int sum;
int x[MAXSIZE];
//输入
void input();
//初始化
void init();
//判断是否可放
bool canPlace(int);
//回溯
void backtrack();
int main(void)
{
while (1)
{
input();
init();
backtrack();
printf("%d\n", sum);
}
return 0;
}
void input()
{
printf("please enter n:");
scanf("%d", &n);
}
void init()
{
int i = 1;
sum = 0;
for (i = 1; i <= n; ++i)
{
x[i] = 0;
}
}
bool canPlace(int t)
{
int i = 1;
for (i = 1; i < t; ++i)
{
if ( x[i] == x[t] || (abs(t - i) == abs(x[t] - x[i])) )
{
return false;
}
}
return true;
}
void backtrack()
{
int i = 1;
int t = 1;
x[1] = 0;
while (t > 0)
{
x[t] += 1;
while (x[t] <= n && !canPlace(t))
{
x[t] += 1;
}
if (x[t] <= n)
{
if (t == n)
{
++sum;
for (i = 1; i <= n; ++i)
{
printf("%d ", x[i]);
}
printf("\n");
}
else
{
++t;
x[t] = 0;
}
}
else
{
--t;
}
}
}