class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param n int整型 the n
     * @return int整型
     */
    int cnt=0;
    int vis[12]={0};
    int vis1[23]={0};
    int vis2[23]={0};

    void Biao(int x,int i,int j,int n)
    {
        vis[j]=x;
        vis1[i-j+n-1]=x;
        vis2[i+j]=x;
    }
     void dfs(int n,int i)
     {
        if(i==n)
        {
            cnt++;
            return;
        }

        for(int j=0;j<n;j++)
        {
            if(!vis[j]&&!vis1[i-j+n-1]&&!vis2[i+j])
            {
                Biao(1, i, j, n);
                dfs(n,i+1);
                Biao(0,i,j,n);
            }
        }
     }
    int Nqueen(int n) {
        // write code here
        if (n <= 0) return 0;
        if (n == 1) return 1;

        cnt=0;

        memset(vis,0,sizeof(vis));
        memset(vis1,0,sizeof(vis1));
        memset(vis2,0,sizeof(vis2));

        dfs(n,0);
        return cnt;
    }
};