美文网首页
52. N皇后 II

52. N皇后 II

作者: 薄荷糖的味道_fb40 | 来源:发表于2019-04-24 16:50 被阅读0次

    n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

    image

    上图为 8 皇后问题的一种解法。

    给定一个整数 n,返回 n 皇后不同的解决方案的数量。

    示例:

    输入: 4
    输出: 2
    解释: 4 皇后问题存在如下两个不同的解法。
    [
     [".Q..",  // 解法 1
      "...Q",
      "Q...",
      "..Q."],
    
     ["..Q.",  // 解法 2
      "Q...",
      "...Q",
      ".Q.."]
    ]
    

    思路:

    递归回溯,每次只考虑安排某一行的皇后,如果能遍历完行res加1。具体实现如下。

    class Solution {
    public:
        int res;
        int totalNQueens(int n) {
            if(n<=0) return 0;
            vector<int> curr(n,0);
            res=0;
            putRow(n,0,curr);
            return res;
        }
        void putRow(int n,int row,vector<int> curr)
        {
            if(row>=n)
            {
                res++;
                return;
            }
            for(int col=0;col<n;col++)
            {
                if(isValid(row,col,curr))
                {
                    curr[row]=col;
                    putRow(n,row+1,curr);
                }
            }
        }
        
        bool isValid(int row,int col,vector<int> curr)
        {
            for(int i=0;i<row;i++)
            {
                if(curr[i]==col || abs(i-row)==abs(col-curr[i]))
                {
                    return false;
                }
            }
            return true;
        }
    };
    

    相关文章

      网友评论

          本文标题:52. N皇后 II

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