算法-排列组合|N皇后问题
n皇后问题是将n个皇后放置在n*n的棋盘上,皇后彼此之间不能相互攻击。
给定一个整数n,返回所有不同的n皇后问题的解决方案。
每个解决方案包含一个明确的n皇后放置布局,其中“Q”和“.”分别表示一个女王和一个空位置。
您在真实的面试中是否遇到过这个题? Yes 样例 对于4皇后问题存在两种解决的方案:
[
[".Q..", // Solution 1
"...Q",
"Q...",
"..Q."],
["..Q.", // Solution 2
"Q...",
"...Q",
".Q.."]
]
class Solution {
public:
/*
* @param n: The number of queens
* @return: All distinct solutions
*/
vector solveNQueens(int n) {
// write your code here
vector queens;
vector nqueens;
solveNQueens(n, 0, queens, nqueens);
return nqueens;
}
void solveNQueens(int n,
int line,
vector& queens,
vector& nqueens) {
if (line == n) {
nqueens.push_back(queens);
return;
}
string linestr = string(n, '.');
for (int c = 0;
c < n;
c++) {
bool canput = true;
for (int l = 0;
l < line;
l++) {
// duijiao
if (queens[l][c] == 'Q'
|| (c + line - l < n && queens[l][c + line - l] == 'Q')
|| (c - line + l >= 0 && queens[l][c - line + l] == 'Q')) {
canput = false;
break;
}
}
if (canput) {
linestr[c] = 'Q';
queens.push_back(linestr);
solveNQueens(n, line + 1, queens, nqueens);
queens.pop_back();
linestr[c] = '.';
}
}
}
};
【算法-排列组合|N皇后问题】
推荐阅读
- 画解算法(1.|画解算法:1. 两数之和)
- Guava|Guava RateLimiter与限流算法
- 一个选择排序算法
- SG平滑轨迹算法的原理和实现
- 《算法》-图[有向图]
- LeetCode算法题-11.|LeetCode算法题-11. 盛最多水的容器(Swift)
- 虚拟DOM-Diff算法详解
- 《数据结构与算法之美》——队列
- 算法回顾(SVD在协同过滤推荐系统中的应用)
- 简谈迪克斯特拉算法