n皇后问题

//打表

深搜行,所以不需要测验行

题目:

http://acm.hdu.edu.cn/showproblem.php?pid=2553

#include<stdio.h>
#include<string.h>
int n;
int ans;
int v[55]={0},z[55]={0},c[55]={0};
void dfs(int x)//x代表行
{
    if(x>n)
    {
        ans++;
        return;
    }
    for(int i=1;i<=n;i++)
    {
        if(!v[i]&&!z[x-i+n]&&!c[x+i])
        {
            v[i]=1;
            z[x-i+n]=1;
            c[x+i]=1;
            dfs(x+1);
            v[i]=0;
            z[x-i+n]=0;
            c[x+i]=0;
        }
    }
}
int main()
{ int r[20],q;
    for(n=1;n<=11;n++)
{
    ans=0;
        memset(v,0,sizeof(v));
                memset(z,0,sizeof(z));
        memset(c,0,sizeof(c));
        dfs(1);
        r[n]=ans;

}
    while(1)
    {
        scanf("%d",&q);
        if(q==0)
        break;
        printf("%d\n",r[q]);

    }
}

 

posted @ 2021-06-08 22:12  废柴废柴少女  阅读(38)  评论(0)    收藏  举报