leetcode 52. N皇后 II(搜索/回溯)

https://leetcode-cn.com/problems/n-queens-ii/

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

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

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

示例:

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

 ["..Q.",  // 解法 2
  "Q...",
  "...Q",
  ".Q.."]
]
class Solution {
public:
    int n,num;
    int vis[3][50];
    void search_(int cur){
        if(cur==n){
            num++;
        }
        else for(int i=0;i<n;i++){
            if(!vis[0][i]&&!vis[1][cur+i]&&!vis[2][cur-i+n]){
                vis[0][i]=vis[1][cur+i]=vis[2][cur-i+n]=1;
                search_(cur+1);
                vis[0][i]=vis[1][cur+i]=vis[2][cur-i+n]=0;
            }
        }
    }
    int totalNQueens(int m) {
        n=m;
        for(int i=0;i<3;i++){
            for(int j=0;j<50;j++){
                vis[i][j]=0;
            }
        }
        search_(0);
        return num;
    }
};

猜你喜欢

转载自www.cnblogs.com/wz-archer/p/12521421.html