Advertisement
Guest User

Untitled

a guest
Aug 23rd, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.66 KB | None | 0 0
  1. class NQueens {
  2. public:
  3. NQueens() { }
  4. ~NQueens() { }
  5.  
  6. void backtrack(vector<vector<string>>& arrangements, vector<string> arrangement, int rowId, int squares,
  7. vector<int> columns, vector<int> leftDiagonal, vector<int> rightDiagonal)
  8. {
  9. for (int colId = 0; colId < squares; ++colId) {
  10. if ( (arrangement[rowId][colId] == '.') && (columns[colId] == 1) &&
  11. (leftDiagonal[rowId + colId] == 1) && (rightDiagonal[rowId - colId + (squares-1)] == 1) ) {
  12. arrangement[rowId][colId] = 'Q';
  13. leftDiagonal[rowId + colId] = 0;
  14. rightDiagonal[rowId - colId + (squares-1)] = 0;
  15. columns[colId] = 0;
  16.  
  17. if (rowId<squares-1)
  18. this->backtrack(arrangements, arrangement, rowId+1, squares, columns, leftDiagonal, rightDiagonal);
  19. else arrangements.push_back(arrangement);
  20.  
  21. arrangement[rowId][colId] = '.';
  22. leftDiagonal[rowId + colId] = 1;
  23. rightDiagonal[rowId - colId + (squares-1)] = 1;
  24. columns[colId] = 1;
  25. }
  26. }
  27. }
  28.  
  29. vector<vector<string>> solveNQueens(int n)
  30. {
  31. vector<vector<string>> arrangements;
  32.  
  33. std::string rowArrangement(n, '.');
  34. vector<string> arrangement(n, rowArrangement);
  35. vector<int> leftDiagonal(2*n-1, 1);
  36. vector<int> rightDiagonal(2*n-1, 1);
  37. vector<int> columns(n, 1);
  38.  
  39. this->backtrack(arrangements, arrangement, 0, n, columns, leftDiagonal, rightDiagonal);
  40.  
  41. return arrangements;
  42. }
  43. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement