记录编号 427428 评测结果 AAAAAAAAAA
题目名称 N皇后问题 最终得分 100
用户昵称 Gravatar_WA自动机 是否通过 通过
代码语言 C++ 运行时间 0.008 s
提交时间 2017-07-21 20:23:02 内存使用 0.29 MiB
显示代码纯文本
#include<cstdio>
#include<algorithm>
using namespace std;
/*struct p
{
    int x,y;
    point(int x=0,int y=0):x(x),y(y){;}
}queen[20];*/
int n,queen[20],ans=0;
inline bool lawful(int x,int p)
{
    for (int a=1;a!=p;++a)
    {
        if (queen[a]==x) return false;
        if (p-a==x-queen[a]) return false;
        if (p-a+x==queen[a]) return false;
    }
    return true;
}
void dfs(int h)
{
    if (h==n+1) {++ans;return;}
    for (int i=1;i<=n;++i)
    {
        if (lawful(i,h))
        {queen[h]=i;dfs(h+1);queen[h]=0;}
    }
}
int main()
{
    #ifndef COGS
    freopen("queen.in","r",stdin);
    freopen("queen.out","w",stdout);
    #endif // COGS
    scanf("%d",&n);
    if (n==1){puts("1\n");return 0;}
    if (n==2 || n==3) {puts("0\n");return 0;}
    dfs(1);
    printf("%d\n",ans);
    return 0;
}