Пример #1
0
 /**
  * Get all distinct N-Queen solutions
  * @param n: The number of queens
  * @return: All distinct solutions
  * For example, A string '...Q' shows a queen on forth position
  */
 vector<vector<string> > solveNQueens(int n) {
     vector<vector<string> > m_res;
     if (n < 1)
         return m_res;
     int *columns = new int[n];
     memset(columns, -1, sizeof(columns));
     vector<string> m_path;
     solveNQueensHelper(m_res, m_path, columns, 0, n);
     delete columns;
     return m_res;
 }
Пример #2
0
 // dfs row by row
 void solveNQueensHelper(vector<vector<string> > &m_res, vector<string> m_path,
     int *columns, int row, int n) {
     if (row == n) {
         m_res.push_back(m_path);
     }
     else {
         // check from col 1 to col n-1
         for (int i = 0; i < n; i++) {
             if (checkValid(columns, row, i)) {
                 string curr_row(n, '.');
                 curr_row[i] = 'Q';
                 columns[row] = i;
                 m_path.push_back(curr_row);
                 solveNQueensHelper(m_res, m_path, columns, row + 1, n); 
                 m_path.pop_back();
                 columns[row] = -1;
                 curr_row[i] = '.';
             }
         }
     }
     return;
 }
Пример #3
0
 void solveNQueensHelper(vector<vector<string>>& res, vector<string>& state, int n, int l) {
     if(l<n){
         for(int j=0;j<n;++j){
             bool b = 1;
             for(int i=0;i<l;++i){
                 b = b&&(state[i][j]=='.');
             }
             if(!b) continue;
             for(int l1=l-1,j1=j-1;j1>=0&&l1>=0;--l1,--j1){
                 b = b&&(state[l1][j1]=='.');
             }
             if(!b) continue;
             for(int l1=l-1,j1=j+1;j1<n&&l1>=0;--l1,++j1){
                 b = b&&(state[l1][j1]=='.');
             }
             if(!b) continue;
             state[l][j] = 'Q';
             solveNQueensHelper(res,state,n,l+1);
             state[l][j] = '.';
         }
     }else{
         res.push_back(state);
     }
 }
Пример #4
0
 vector<vector<string>> solveNQueens(int n) {
     vector<vector<string>> res;
     vector<string> state(n,string(n,'.'));
     solveNQueensHelper(res,state,n,0);
     return res;
 }