由于皇后不能在同一行所以每行每列都必须有且仅有一个皇后,然后逐行搜索
看到学长的代码比我少一半,也是觉得自己弱爆了。
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
int n,sum=0;
int mapp[11][11];
int visit[11]={0};
int jduge(int x,int y)
{
int flag=1;
for(int i=1;i<x;i++)
{
for(int j=1;j<=n;j++)
{
if(mapp[i][j]&&((abs(i-x)==abs(j-y))||j==y))
{
flag=0;
return 0;
}
}
}
if(flag) return 1;
}
void dfs(int x,int y)
{
mapp[x][y]=1;
if(x==n)
{
sum++;return;
}
for(int i=1;i<=n;i++)
{
if(jduge(x+1,i)) dfs(x+1,i),mapp[x+1][i]=0;
}
}
int main()
{
while(cin>>n&&n)
{
if(visit[n])
{
cout<<visit[n]<<endl;continue;
}
sum=0;
for(int i=1;i<=n;i++)
{
memset(mapp,0,sizeof(mapp));
dfs(1,i);
}
cout<<sum<<endl;
visit[n]=sum;
}
return 0;
}