n-queens

来源:互联网 发布:觉知疗法 编辑:程序博客网 时间:2024/06/18 10:14

The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.

Given an integer n, return all distinct solutions to the n-queens puzzle.
Each solution contains a distinct board configuration of the n-queens’ placement, where’Q’and’.’both indicate a queen and an empty space respectively.
For example,
There exist two distinct solutions to the 4-queens puzzle:
[
[“.Q..”, // Solution 1
“…Q”,
“Q…”,
“..Q.”],

[“..Q.”, // Solution 2
“Q…”,
“…Q”,
“.Q..”]
]

class Solution {public:    bool judge_quee(string &vec)  //判断n个皇后是否在对角线上        {        int len=vec.size();        if(len<=1)            return true;        for(int i=0;i<len;++i)            for(int j=i+1;j<len;++j)            {            if(i-j==vec[i]-vec[j]||j-i==vec[i]-vec[j])                return false;        }        return true;    }    vector<vector<string> > solveNQueens(int n) {        string vec;        for(int i=0;i<n;++i)            vec+=(i+'0');        vector<vector<string> > res;        recur_pai(res,vec,0);        return res;            }    void recur_pai(vector<vector<string>> &res,string &vec,int begin)//求全排列        {        if(begin==vec.size()&&judge_quee(vec)){           vector<string> temp(vec.size(),string(vec.size(),'.'));           for(int i=0;i<vec.size();++i)               {               temp[i][vec[i]-'0']='Q';           }           res.push_back(temp);        }        for(int i=begin;i<vec.size();++i){            swap(vec[begin],vec[i]);            recur_pai(res,vec,begin+1);            swap(vec[begin],vec[i]);        }    }};
原创粉丝点击