第cur行放置第i列的皇后
c[cur]=i;
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int c[100],ans=0,n;
void dfs(int cur)
{
if(cur==n+1)
{
ans++;
return ;
}
for(int i=1;i<=n;i++)
{
c[cur]=i;
bool ok=0;
for(int j=1;j<cur;j++)
{
if(c[j]==c[cur]||cur+c[cur]==j+c[j]||c[cur]-cur==c[j]-j)
{
ok=1;
break;
}
}
if(!ok)
dfs(cur+1);
}
}
int main()
{
#ifdef LOCAL
freopen("in.txt","r",stdin);
#endif
int T;
cin>>T;
while(T--)
{
cin>>n;
dfs(1);
cout<<ans<<endl;
ans=0;
}
return 0;
}
第二种
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int ans=0,n;
bool vis[30][300];
void dfs(int cur)
{
if(cur==n) ans++;
else
for(int i=0;i<n;i++)
{
if(!vis[0][i]&&!vis[1][cur+i]&&!vis[2][cur-i+100])
{
vis[0][i]=vis[1][cur+i]=vis[2][cur-i+100]=1;
dfs(cur+1);
vis[0][i]=vis[1][cur+i]=vis[2][cur-i+100]=0;
}
}
}
int main()
{
#ifdef LOCAL
freopen("in.txt","r",stdin);
#endif
int T;
cin>>T;
while(T--)
{
cin>>n;
dfs(0);
cout<<ans<<endl;
ans=0;
}
return 0;
}