Advertisement
Guest User

Untitled

a guest
Sep 17th, 2019
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.27 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <numeric>
  5.  
  6. using namespace std;
  7.  
  8. bool is_valid(const vector<int>& cols) {
  9. for (int i=0; i<cols.size(); ++i) {
  10. for (int j=i+1; j<cols.size(); ++j) {
  11. if (abs(cols[i]-cols[j]) == j-i) //clash on diagonal
  12. return false;
  13. }
  14. }
  15. return true;
  16. }
  17.  
  18. vector<vector<string>> solveNQueens(int n) {
  19. vector<vector<string>> ret;
  20. vector<int> cols(n,0);
  21. iota(cols.begin(), cols.end(), 0);
  22. do {
  23. if (is_valid(cols)) {
  24. //add grid state in string format to ret
  25. vector<string> grid;
  26. string line(n, '.');
  27. for (int i=0; i<cols.size(); ++i) { //the grid will be rotated but that doesn't matter
  28. line[cols[i]] = 'Q';
  29. grid.push_back(line);
  30. line[cols[i]] = '.';
  31. }
  32. ret.push_back(grid);
  33. }
  34. } while (next_permutation(cols.begin(), cols.end()));
  35. return ret;
  36. }
  37.  
  38. void print_grids(const vector<vector<string>>& grids) {
  39. for (const vector<string>& grid : grids) {
  40. for (const string& line : grid)
  41. cout << line << "\n";
  42. cout << "\n";
  43. }
  44. }
  45.  
  46. int main() {
  47. auto grids = solveNQueens(8);
  48. print_grids(grids);
  49.  
  50. return 0;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement