#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
int a[10],b[10],n,i,t;
int f[10][10];
int check(int a[],int n)
{
for(int i=1; i<n; i++)
{
if(abs(a[i]-a[n])==abs(i-n)||(a[i]==a[n]))
return 0;
}
return 1;
}
void solve2(int i)
{
int j,k;
for(j=1; j<=n; j++)
{
if(f[i][j]&&j!=b[i])
{
a[i]=j;
if(check(a,i))
{
if(i<n)
solve2(i+1);
else
t++;
}
}
}
}
void solve1(int i)
{
int j,k;
for(j=1; j<=n; j++)
{
if(f[i][j])
{
b[i]=j;
if(check(b,i))
{
if(i<n)
solve1(i+1);
else
{
solve2(1);
break;
}
}
}
}
}
int main()
{
scanf("%d",&n);
for(i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
scanf("%d",&f[i][j]);
}
solve1(1);
printf("%d\n",t);
return 0;
}
蓝桥杯2n皇后
最新推荐文章于 2022-01-11 08:18:19 发布