LeetCode-N-Queens-N皇后-回溯
https://oj.leetcode.com/problems/n-queens/
回溯法的课本例题。注意有递归非递归两种实现。
class Solution {
public:
int n,m;
vector <int> c;
vector <vector<string>> tot;
bool Check(int p,int q){
for (int i=0;i<p;i++){
if (c[i]==q) return false;
if (abs(p-i)==abs(q-c[i])) return false;
}
return true;
}
void Solve(int p){
if (p==n) {
vector <string> res(n,string(n,'.'));
for (int i=0;i<n;i++){
res[i][c[i]]='Q';
}
tot.push_back(res);
return;
}
for (int i=0;i<n;i++){
if (Check(p,i)){
c[p]=i;
Solve(p+1);
}
}
}
vector<vector<string> > solveNQueens(int n) {
this->n=n;
c.resize(n,-1);
Solve(0);
return tot;
}
};
浙公网安备 33010602011771号