[Leetcode 52, Hard] N Queens II

来源:互联网 发布:淘宝每日好店怎么参加 编辑:程序博客网 时间:2024/06/04 18:24

Problem:

Follow up for N-Queens problem.

Now, instead outputting board configurations, return the total number of distinct solutions.

Analysis:


Solutions:

C++:

    bool IsSafeLean(int row, int col, vector<int> seizedColumns, int row_bound)      {          for(int i = 1; row - i >= 0 && col + i < row_bound; ++i) {              if(seizedColumns[row - i] == col + i)              return false;          }            for(int i = 1; row - i >= 0 && col - i >= 0; ++i) {              if(seizedColumns[row - i] == col - i)              return false;          }            return true;      }        void FindPlacements(vector<int> seizedColumns, int row, int row_bound, vector<vector<string> >& sols)     {          if(row == row_bound) {              vector<string> placement;              for(int i = 0; i < seizedColumns.size(); ++i) {                  string row = "";                  for(int j = 0; j < row_bound; ++j) {                      if(j == seizedColumns[i])                          row.push_back('Q');                      else                          row.push_back('.');                  }                  placement.push_back(row);              }              sols.push_back(placement);          } else {              for(int col = 0; col < row_bound; ++col) {                  if(!seizedColumns.empty()) {                      int index = 0;                      for(; index < seizedColumns.size(); ++index) {                          if(col == seizedColumns[index])                          break;                      }                        if(index < seizedColumns.size() || (index == seizedColumns.size() && !IsSafeLean(row, col, seizedColumns, row_bound)))                          continue;                  }                    seizedColumns.push_back(col);                  FindPlacements(seizedColumns, row + 1, row_bound, sols);                  seizedColumns.erase(seizedColumns.end() - 1);              }          }      }        int totalNQueens(int n) {        vector<vector<string> > sols;          vector<int> seizedColumns;            FindPlacements(seizedColumns, 0, n, sols);            return sols.size();    }
Java:


Python:

0 0