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.
相关文章推荐
- 【一天一道LeetCode】#52. N-Queens II
- [LeetCode] 52. N-Queens II
- LeetCode - 52. N-Queens II
- 【一天一道LeetCode】#52. N-Queens II
- Leetcode 52. N-Queens II
- [Leetcode] 52. N-Queens II
- leetcode 52. N-Queens II
- LeetCode | 52.N-Queens II
- leetcode: 52. N-Queens II
- [leetcode] 52. N-Queens II 解题报告
- leetcode-52. N-Queens II
- LeetCode 52. N-Queens II
- LeetCode 52. N-Queens II(N皇后)
- leetcode52. N-Queens II
- LeetCode-51. N-Queens和LeetCode-52. N-Queens II
- leetcode 52. N-Queens II
- <LeetCode OJ> 52. N-Queens II
- [leetcode]52. N-Queens II
- leetcode-52. N-Queens II
- LeetCode 52.N-Queens II