问题描述:N皇后

  1. /*
  2. * @file RecursiveBacktrackNqueens.cpp
  3. * @brief to use RecursiveBacktrack's way
  4. * @author taoxiaoxiao
  5. * @date 12-1-2013
  6. */
  7. //递归回溯法求解N皇后
  8. //输出解决方案数和行列标(只打印第一个解决方案)
  9. #include <iostream>
  10. using namespace std;
  11. #define MAXN 13
  12. int x[MAXN + 1], y[MAXN+1], n, sum;
  13. bool isGo=false;
  14. bool place(int k)
  15. {
  16. for (int j = 1; j < k; ++j)
  17. {
  18. if (x[j] == x[k] || abs(x[j] - x[k]) == abs(j - k))
  19. return false;
  20. }
  21. return true;
  22. }
  23. void RecursiveBacktrackNqueens(int k)
  24. {
  25. int i;
  26. if (k > n)
  27. {
  28. ++sum;
  29. if (isGo == false)
  30. {
  31. for (i = 1; i <= n; ++i)
  32. y[i] = x[i];
  33. isGo = true;
  34. }
  35. }
  36. else
  37. {
  38. for (i = 1; i <= n; ++i)
  39. {
  40. x[k] = i;
  41. if (place(k))
  42. RecursiveBacktrackNqueens(k + 1);
  43. }
  44. }
  45. }
  46. int main()
  47. {
  48. system("title 递归回溯法---Nqueens");
  49. system("color 0a");
  50. cin >> n;
  51. RecursiveBacktrackNqueens(1);
  52. cout << sum << endl;
  53. for (int i = 1; i <= n; ++i)
  54. cout << i << " " << y[i] << endl;
  55. return 0;
  56. }

本文系本人个人公众号「梦回少年」原创发布,扫一扫加关注。