P51 N皇后

这道题是一道比较难的dfs题,主要是斜对角线的判断。

Screenshot 2025-10-23 132330.png

树形结构, 在已经不满足条件的时候剪枝,会节省大部分时间。

Screenshot 2025-10-23 132359.png

对角线的判断

Screenshot 2025-10-23 133853.png

class Solution {
    vector<vector<string>> ans;
    vector<string> path;
    vector<bool> a,b,c;
  
public:
    vector<vector<string>> solveNQueens(int n) {
        a = vector<bool>(n);
        b = c = vector<bool>(2*n);
        path = vector<string>(n,string(n,'.'));
        dfs(0,n);
        return ans;
    }
    void dfs(int x,int n){
        if(x == n){
            ans.push_back(path);
            return ;
        }
        for(int i=0;i<n;i++){
            if(a[i] || b[i-x+n] || c[i+x]) continue;
            a[i] = b[i-x+n] = c[i+x] = true;
            path[x][i] = 'Q';
            dfs(x+1 , n);
            path[x][i] = '.';
            a[i] = b[i-x+n] = c[i+x] = false;
        }
    }
};

明天见!OvO

迷茫java练习生