一、可行解的个数
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 1000;
int n,tot=0,c[maxn];
void search(int cur)
{
if(cur==n) tot++;
else
{
for(int i=0;i<n;i++)
{
int ok = 1;
c[cur] = i;
for(int j =0;j<cur;j++)
{
if(c[cur]==c[j] || cur-c[cur]==j-c[j] || cur+c[cur]==j+c[j])//判断当前皇后和已存在皇后是否在同一列、对角线上
{
ok = 0;
break;
}
}
if(ok) search(cur+1);
}
}
}
int main()
{
while(cin>>n)
{
memset(c,0,sizeof(c));
tot=0;
search(0);
cout<<"可行解的个数为:"<<endl;
cout<<tot<<endl;
}
return 0;
}
二、打印可行解的纵坐标
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 1000;
int n,tot,c[maxn];
int vis[4][maxn];
void search(int cur)
{
if(cur==n)
{
for(int i=0;i<n;i++)
{
if(i==n-1) cout<<c[i]<<endl;
else cout<<c[i]<<" ";
}
tot++;
}
else
{
for(int i=0;i<n;i++)
{
if(