The classic eight Queens question
1 classSolution {2 Public:3vector<vector<string>> Solvenqueens (intN) {4vector<vector<string>>result;5vector<int> pos (N,-1);6vector<int> Iscolumnsafe (N,1);7vector<int> Isdiag1safe (2N1,1);//Main Diagonal8vector<int> Isdiag2safe (2N1,1);//Oblique Diagonal9Checkpos (result, POS, Iscolumnsafe, Isdiag1safe, Isdiag2safe,0, n);Ten returnresult; One } A Private: - voidCheckpos ( -vector<vector<string>>&result, thevector<int>&Pos, -vector<int>&Iscolumnsafe, -vector<int>&Isdiag1safe, -vector<int>&Isdiag2safe, + intI, - intN + ) A { at for(intj =0; J < N; ++j) { - BOOLFlag = Iscolumnsafe[j] && isdiag1safe[i-j + N-1] && Isdiag2safe[i +j]; - if(flag) { -ISCOLUMNSAFE[J] =0; -Isdiag1safe[i-j + N-1] =0; -Isdiag2safe[i + j] =0; inPos[i] =J; - if(i = = N-1) { tovector<string> Vec (N,string(N,'.')); + intCNT =0; - for(intK =0; K < n; ++k) { theVec[cnt ++][pos[k]] ='Q'; * } $ Result.push_back (VEC);Panax Notoginseng } - Else { theCheckpos (result, POS, Iscolumnsafe, Isdiag1safe, Isdiag2safe, i +1, n); + } AISCOLUMNSAFE[J] =1; theIsdiag1safe[i-j + N-1] =1; +Isdiag2safe[i + j] =1; - } $ } $ } -};
051.n-queens