您的位置:首页 > 产品设计 > UI/UE

leetcode.51. N-Queens

2016-05-23 21:15 435 查看
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 {
vector<vector<string> > vvs;

public:
vector<vector<string> > solveNQueens(int n)
{
vector<int> vi(n);
solveNQueens(vi, n, 0);
return vvs;
}

private:
void solveNQueens(vector<int> &vi, int n, int c)
{
if(c == n)
{
vector<string> vs(n, string(n, '.'));
for(int i = 0; i < n; ++ i)
vs[i][vi[i]] = 'Q';
vvs.push_back(vs);
return;
}
for(vi[c] = 0; vi[c] < n; ++ vi[c])
if(safe(vi, n, c))
solveNQueens(vi, n, c + 1);
}

bool safe(vector<int> &vi, int n, int c)
{
for(int i = 0; i < c; ++ i)
if(vi[i] == vi[c] || abs(vi[c] - vi[i]) == abs(c - i))
return false;
return true;
}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: