Guest User

Untitled

a guest
Oct 19th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.17 KB | None | 0 0
  1. // nqueens.cpp
  2. // Aswin van Woudenberg
  3.  
  4. #include <iostream>
  5. #include <cstdlib>
  6.  
  7. bool issafe(int *rows, int i)
  8. {
  9. for (int k=0; k<i; k++)
  10. if (rows[i] == rows[k] || abs(rows[i]-rows[k]) == i-k)
  11. return false;
  12. return true;
  13. }
  14.  
  15. void println(int n)
  16. {
  17. std::cout << "+";
  18. for (int c=0; c<n; c++)
  19. std::cout << "-+";
  20. std::cout << std::endl;
  21. }
  22.  
  23. void printsol(int *rows, int n)
  24. {
  25. println(n);
  26. for (int r=0; r<n; r++)
  27. {
  28. std::cout << "|";
  29. for (int c=0; c<n; c++)
  30. if (rows[r] == c)
  31. std::cout << "Q|";
  32. else
  33. std::cout << " |";
  34. std::cout << std::endl;
  35. println(n);
  36. }
  37. std::cout << std::endl;
  38. }
  39.  
  40. void nqueens(int *rows, int n, int i)
  41. {
  42. if (issafe(rows, i-1))
  43. if (i == n)
  44. printsol(rows, n);
  45. else
  46. for (int k=0; k<n; k++)
  47. {
  48. rows[i] = k;
  49. nqueens(rows, n, i+1);
  50. }
  51. }
  52.  
  53. void nqueens(int n)
  54. {
  55. int *rows;
  56. rows = new int[n];
  57. nqueens(rows, n, 0);
  58. delete [] rows;
  59. }
  60.  
  61. int main(int argc, char *argv[])
  62. {
  63. int n; // number of queens
  64.  
  65. if (argc == 1)
  66. std::cout << "Usage: " << argv[0] << " <number_of_queens>" << std::endl;
  67. else
  68. {
  69. n = atoi(argv[1]);
  70. if (n == 0)
  71. std::cout << "No valid number of queens entered!" << std::endl;
  72. else
  73. nqueens(n);
  74. }
  75. return 0;
  76. }
Add Comment
Please, Sign In to add comment