class Solution public vectorvectorintvec;int total=0; bool checkint xint y forint i=0;ivecsize;i++ ifveci0==xreturn false; ifveci0+y==veci1+xreturn false;
在backtracking函数中,应该判断startindex是否等于n,而不是k。此外,在check函数中的第二个和第三个判断条件的变量顺序应该交换。修改后的代码如下:
class Solution {
public:
vector<vector<int>>vec;
int total=0;
bool check(int x,int y){
for(int i=0;i<vec.size();i++){
if(vec[i][0]==x){return false;}
if(vec[i][0]+vec[i][1]==x+y){return false;}
if(vec[i][0]+x==vec[i][1]+y){return false;}
}
return true;
}
void backtracking(int n,int startindex){
if(startindex==n){
total++;
return;
}
for(int i=0;i<n;i++){
if(check(i,startindex)){
vec.push_back({i,startindex});
backtracking(n,startindex+1);
vec.pop_back();
}
}
}
int totalNQueens(int n) {
backtracking(n,0);
return total;
}
};
``
原文地址: https://www.cveoy.top/t/topic/ilQN 著作权归作者所有。请勿转载和采集!