LeetCode Day40 Queen N

class Solution {
public:
    vector<vector<string>> solveNQueens(int n) {
        vector<vector<string>> res;
        vector<int> pos(n,-1);
        DFS(pos,0,res);  
        return res;
    }
    void DFS(vector<int> &pos,int row,vector<vector<string>> & res){
        int n=pos.size();
        if(row==n){
            vector<string> out(n,string(n,'.'));
            for(int i=0;i<n;i++){
                out[i][pos[i]]='Q';
            }
            res.push_back(out);
        }
        else{
            for(int col=0;col<n;col++){
                int flag=1;
                for(int i=0;i<row;i++){//判断有没有列或对角线冲突 判断对角线,即判断当前行减去第i行的值和当前列减去第i行皇后所在列的值是否相等
                    if(pos[i]==col||abs(row-i)==abs(col-pos[i])) flag=0;
                }
                if(flag){
                    pos[row]=col;
                    DFS(pos,row+1,res);
                    pos[row]=-1;
                }
            }
        }
    }
};

其他解法

N皇后其他解法

猜你喜欢

转载自blog.csdn.net/weixin_41394379/article/details/84308308