8 个皇后问题

8个皇后问题

dfs+回溯方法

class Solution {
public:
    vector<vector<string> > solveNQueens(int n) {
        vector<vector<string> > res;
        vector<int> coloccupid(n,-1);
        vector<string> temp;
        if(n<1){
            return res;
        }
        sove(0,n,temp,res,coloccupid);
        return res;
    }
    
    void sove(int row,int n,vector<string> temp,vector<vector<string> > &res,vector<int> &coloccupid){
        //row 表示第几行 摆放    coloccupid 表示第row 第 i列被占用
        if(row==n){
            res.push_back(temp);
            return ;
        }
        for(int i=0;i<n;i++){  // i 现在表示的是列
            string s(n,'.');
            s[i]='Q';
            coloccupid[row]=i; //第row 第i列被占用
            temp.push_back(s);
            if(isvalid(coloccupid,row,i)){
                sove(row+1,n,temp,res,coloccupid);
            }
            temp.pop_back();
            coloccupid[row]=-1;
        }
    }
    bool isvalid(vector<int> &coloccupid, int row,int j){
        for(int i=0;i<row;i++){
            if(coloccupid[i]==j || abs(row-i)==abs(coloccupid[i]-j)){  //在同一列 或者斜线上
                return false;
            }
        }
        return true;
    }
};

猜你喜欢

转载自blog.csdn.net/u010325193/article/details/85518631