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

[CareerCup] 9.9 Eight Queens 八皇后问题

2015-09-29 11:17 543 查看
9.9 Write an algorithm to print all ways of arranging eight queens on an 8x8 chess board so that none of them share the same row, column or diagonal. In this case, "diagonal" means all diagonals, not just the two that bisect the board.

LeetCode上的原题,请参见我之前的博客N-Queens N皇后问题N-Queens II N皇后问题之二

class Solution {
public:
vector<vector<int> > placeQueens(int n) {
vector<vector<int> > res;
vector<int> pos(n, -1);
placeQueensDFS(pos, 0, res);
return res;
}
void placeQueensDFS(vector<int> &pos, int row, vector<vector<int> > &res) {
int n = pos.size();
if (row == n) res.push_back(pos);
else {
for (int col = 0; col < n; ++col) {
if (isValid(pos, row, col)) {
pos[row] = col;
placeQueensDFS(pos, row + 1, res);
pos[row] = -1;
}
}
}
}
bool isValid(vector<int> &pos, int row, int col) {
for (int i = 0; i < row; ++i) {
if (col == pos[i] || abs(row - i) == abs(col - pos[i])) {
return false;
}
}
return true;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: