#include <bits/stdc++.h>
using namespace std;
int a[16][16];
int l[16];
int n,ans;
void paint(int x,int y)
{
int x1=x+1,y1=y-1;
while (x1<=n && y1>0)
{
a[x1][y1]++;
x1++; y1--;
}
x1=x+1; y1=y+1;
while (x1<=n && y1<=n)
{
a[x1][y1]++;
x1++; y1++;
}
x1=x+1; y1=y;
while (x1<=n)
{
a[x1][y1]++;
x1++;
}
}
void depaint(int x,int y)
{
int x1=x+1,y1=y-1;
while (x1<=n && y1>0)
{
a[x1][y1]--;
x1++; y1--;
}
x1=x+1; y1=y+1;
while (x1<=n && y1<=n)
{
a[x1][y1]--;
x1++; y1++;
}
x1=x+1; y1=y;
while (x1<=n)
{
a[x1][y1]--;
x1++;
}
}
void dfs(int x,int y)
{
if (x==n) {
ans++;
if (ans<=3)
{
for (int i=1;i<=n;i++) cout<<l[i]<<" ";
cout<<endl;
}
}
else {
for (int i=1;i<=n;i++)
if (a[x+1][i]==0){
l[x+1]=i;
paint (x+1,i);
dfs(x+1,i);
depaint(x+1,i);
l[x+1]=0;
}
}
}
int main()
{
cin>>n;
for (int i=1;i<=n;i++)
{
l[1]=i;
paint(1,i);
dfs(1,i);
depaint(1,i);
l[1]=0;
}
cout<<ans;
}
原文:https://www.cnblogs.com/asanagiyantia/p/11747513.html