/**
 * 
 * @param n int整型 the n
 * @return int整型
 */
int count=0;
int rec[20]; //做一下记录 下标i代表行,值rec[i]代表存的每一列


int check(int rec[],int x,int y)
{
    int i;
    for(i=1;i<x;i++)//i从第一行到相应的行
    {
         //rec[i]+i下标加值是主对角元素,i-rec[i]副对角线元素,x是行号,y是列号
        if(rec[i]==y||i+rec[i]==x+y||i-rec[i]==x-y)
        {
            return 0;
        }
    }
    return 1;
}


 void dfs(int row ,int n)
 {
     int col=0;
     if(row==n+1)
     {
         count++;
         return;
     }

     for(col=1;col<=n;col++)
     {
         if(check(rec,row,col))//检查这一列能不能放v
         {
             rec[row]=col;  //假设在row这一行皇后放在col这列
             dfs(row+1,n);   //dfs深搜
             rec[row]=0; //回溯
         }
     }
 }
int Nqueen(int n ) {
    // write code here

    dfs(1,n);
    return count;
}