#include <cstdio>
#include <iostream>
#define N 4
using namespace std;
int main()
{
int x[N+1],fg,k,i,s,n,j;
n=N;i=1;x[i]=1;s=0;
while(1)
{
fg=1;
for(k =i-1;k>=1;k–)
{
if(x[i]==x[k]||abs(x[i]-x[k])==i-k)
//查找是否符合条件(不在对角线上,且不再同一列)
fg =0;
}
if(fg == 1&&i==n)
//找到符合条件的组合输出
{
s++;
for(j = 1;j<=n;j++)
{
printf(“%2d”,x[j]);
}
printf(“\n”);
}
if(i<n&&fg == 1)
//如果没有冲突就像转向下一行并试探
{
//printf(“i>>>>%d\n”,i);
i++;
x[i]=1;
//对下一行进行初始化赋值
continue;
}
while(x[i] == n&&i>1)
//回溯(当某一行i走到行尾时就回溯)
i–;
if(i==1&&x[i]==n)
//判断是否结束,及第一行走到行尾
break;
else
x[i]=x[i] +1;
//如果没有结束就试探本行的下一个位置
}
printf(“%d\n”,s);
}