N皇后

作者: 见习炼丹师 | 来源:发表于2018-06-22 19:23 被阅读0次
    #include<cstdio>
    #include<cstdlib>
    #include <cmath>
    #define MAXN 50
    
    int num = 0;
    
    void NQueens(int n, int AB[], int cur)   // cur == current
    {
        if (cur >= n)
            ++num;//说明已经枚举完毕,成立
        else
        {
            for (int i = 0; i < n; i++)//遍历新一行可能的列
            {
                int ok = 1;
                for(int j=0; j<cur; j++)//遍历已经排好的行
                    if (AB[j] == i || abs(cur - j) == abs(i - AB[j]))
                    {
                        ok = 0;
                        break;
                    }
                if (ok)
                {
                    AB[cur] = i;
                    NQueens(n, AB, cur + 1);
                }
            }
        }
    }
    int main()
    {
        int T;
        scanf("%d", &T);
        while(T--)
        {
            int n, AB[MAXN];
            scanf("%d", &n);
            NQueens(n, AB, 0);
            printf("%d\n", num);
            num = 0;
        }
        return 0;
    }
    
    

    相关文章

      网友评论

          本文标题:N皇后

          本文链接:https://www.haomeiwen.com/subject/fzklyftx.html