题目:
n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

上图为 8 皇后问题的一种解法。
给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。
每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。
示例:
输入: 4
输出: [
[".Q…", // 解法 1
“…Q”,
“Q…”,
“…Q.”],
["…Q.", // 解法 2
“Q…”,
“…Q”,
“.Q…”]
]
解释: 4 皇后问题存在两个不同的解法。
代码:
class Solution { public: vector<vector<string>> solveNQueens(int n) { vector<vector<string>> ret; string str(n, '.'); vector<string> temp(n, str); solve(0, n, temp, ret); return ret; } private: void solve(int i, int& n, vector<string> temp, vector<vector<string>>& ret){ if(i == n) { ret.push_back(temp); } else { for(int j = 0; j < n; j++) { if(!isValid(temp,i,j,n)) continue; temp[i][j] = 'Q'; solve(i+1, n, temp, ret); //消除 temp[i][j] = '.'; } } } bool isValid(vector<string> &temp, int& i, int& j, int& n){ int k, l; for(k = 0; k < i; k++) //正上检查 { if('Q'==temp[k][j]) return false; } k = i; l = j; while(k >= 0 && l >= 0) //左上检查 { if('Q'==temp[k][l]) return false; k -= 1; l -= 1; } k = i; l = j; while(k >= 0 && l < n) //右上检查 { if('Q'==temp[k][l]) return false; k -= 1; l += 1; } return true; } }; 文章来源: https://blog.csdn.net/qq_31820761/article/details/92061060