【leetCode刷题日记】 51. N-Queens

来源:互联网 发布:java能调用api 编辑:程序博客网 时间:2024/05/17 02:43
class Solution {private:    vector<vector<string>> res;    vector<bool> col,dia1,dia2;    void putQueen(int n,int index,vector<int>& row){        if(index == n){            //将row中的信息转化为string并压入res            res.push_back(rowToString(n,row));            return;        }        //尝试将第index行的皇后摆放在i列的位置        for(int i=0;i<n;i++){            //剪枝,竖向和斜向都不能有其它皇后            if(!col[i] && !dia1[index-i+n-1] && !dia2[index+i]){                row.push_back(i);                col[i] = true;                dia1[index-i+n-1] = true;                dia2[index+i] = true;                putQueen(n,index+1,row);                col[i] = false;                dia1[index-i+n-1] = false;                dia2[index+i] = false;                row.pop_back();            }                    }        return;    }    vector<string> rowToString(int n,vector<int>& row){        vector<string> board(n,string(n,'.'));        for(int i=0;i<n;i++){            board[i][row[i]] = 'Q';        }        return board;    }public:    vector<vector<string>> solveNQueens(int n) {        res.clear();        col = vector<bool>(n,false);        dia1 = vector<bool>(2*n-1,false);//左对角线        dia2 = vector<bool>(2*n-1,false);//右对角线                vector<int> row;        putQueen(n,0,row);        return res;    }};

原创粉丝点击