include<iostream>
#include<algorithm>
#define N 100
using namespace std;
int n;
int ans=0;
int col[3][N];
int row[3][N];
int w[N],b[N];
int a[N][N];
void dfs1(int);
void dfs2(int);
void dfs1(int r)
{
if(r==n)
{
ans++;
return;
}
else
for(int i=0; i<n; i++)
{
if(!col[0][i]&&!col[1][i+r]&&!col[2][i-r+n]&&a[r][i])
{
w[r]=i;
col[0][i]=col[1][i+r]=col[2][i-r+n]=1;
dfs1(r+1);
col[0][i]=col[1][i+r]=col[2][i-r+n]=0;
}
}
}
void dfs2(int r)
{
if(r==n)
{
dfs1(0);
return;
}
else
for(int i=0; i<n; i++)
{
if(!row[0][i]&&!row[1][i+r]&&!row[2][i-r+n]&&a[r][i]&&i!=w[r])
{
b[r]=i;
row[0][i]=row[1][i+r]=row[2][i-r+n]=true;
dfs2(r+1);
row[0][i]=row[1][i+r]=row[2][i-r+n]=false;
}
}
}
int main()
{
cin>>n;
for(int i=0; i<n; i++)
for(int j=0; i<n; j++)
cin>>a[i][j];
dfs1(0);
cout<<ans<<endl;
return 0;
}
为什么这个2n皇后问题结果运行不出来?