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

Leetcode 52. N-Queens II

2017-12-21 10:12 405 查看
//一行一行的放置皇后 每放一个判断一次 歇着和竖着有没有重复 只判断已经放过的
class Solution {
public:
vector<vector<string>> ans;//
int count;//解法个数
bool IsCash(vector<int> QueenAry, int nRow) //判断这一行和上面的行有没有一列或是在一个对角线的
{
for (int i = 0; i<nRow; i++)
{
if (QueenAry[nRow] == QueenAry[i])
{
return true;
}
if (abs(QueenAry[nRow] - QueenAry[i]) == abs(nRow - i))
{
return true;
}
}
return false;
}
void showQueen(vector<int> QueenAry)
{
string s(QueenAry.size(), '.');//全部设置为.
vector<string> v;
for (int i = 0; i < QueenAry.size(); i++)
{
s[QueenAry[i]] = 'Q';
v.push_back(s);
s[QueenAry[i]] = '.';//q写完了 变回来.
}
ans.push_back(v);
}
void putQueen(vector<int> QueenAry, int nRow) //QueenAry保存每行的位置(nrow行皇后在哪一列) nrow代表哪一行
{
for (int i = 0; i < QueenAry.size(); i++)
{
QueenAry[nRow] = i;//皇后的位置从n开始便利 找寻符合要求的那一个
if (!IsCash(QueenAry, nRow)) //判断前面的行有没有皇后在同一列 同一个斜对角的
{
if (nRow == QueenAry.size() - 1) //如果已经是最后一行了 把答案装进ans
{
count++;
showQueen(QueenAry);
}
else
{
putQueen(QueenAry, nRow + 1);
}
}
}
}
int totalNQueens(int n) {

count = 0;
vector<int> Queen(n, 0);
putQueen(Queen, 0);
return count;
}
};


Follow up for N-Queens problem.

Now, instead outputting board configurations, return the total number of distinct solutions.

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