#include<iostream>
#include<cstring>
using namespace std;
int n,tot;
int vis[3][100],C[20];
void search(int cur)//cur代表行
{
int i,j;
if(cur==n)
{
tot++;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
if(C[i]==j)
cout<<"1"<<" ";
else
cout<<"0"<<" ";
cout<<endl;
}
cout<<endl;
}
else
{
for(i=0; i<n; i++)//代表列
{
if(!vis[0][i]&&!vis[1][cur+i]&&!vis[2][cur-i+n])//不在同一列,同一副对角线,同一主对角线
{
vis[0][i]=vis[1][cur+i]=vis[2][cur-i+n]=1;
C[cur]=i; //用于打印
search(cur+1);
vis[0][i]=vis[1][cur+i]=vis[2][cur-i+n]=0;
}
}
}
}
int main()
{
while(cin>>n)
{
tot=0;
memset(vis,0,sizeof(vis));
memset(C,0,sizeof(C));
search(0);
cout<<tot<<endl;
}
}
N皇后
最新推荐文章于 2024-04-18 08:15:00 发布