fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. //check là con sau phải lớn hơn (0) hay nhỏ hơn (1)
  4. const int MaxN = 35;
  5. int n;
  6. int a[MaxN];
  7. void backtrack(int pos, int sum,int val, int check)
  8. {
  9. if(sum==n)
  10. {
  11. for (int i=1; i<=pos-1; i++)
  12. {
  13. cout << a[i] << " ";
  14. }
  15. cout << "\n";
  16. return ;
  17. }
  18. if(pos==1)
  19. {
  20. for (int i=1; i<=n; i++)
  21. {
  22. a[pos]=i;
  23. if(i==1)
  24. {
  25. backtrack(pos+1,sum+i,i,0);
  26. }
  27. else if(i==n)
  28. {
  29. backtrack(pos+1,sum+i,i,1);
  30. }
  31. else
  32. {
  33. backtrack(pos+1,sum+i,i,1);
  34. backtrack(pos+1,sum+i,i,0);
  35. }
  36. }
  37. }
  38. else
  39. {
  40. if(check==0)
  41. {
  42. for (long long i=val+1; i<=n-sum; i++)
  43. {
  44. a[pos]=i;
  45. backtrack(pos+1,sum+i,i,1);
  46. }
  47. }
  48. else
  49. {
  50. for (long long i=1; i<val; i++)
  51. {
  52. a[pos]=i;
  53. backtrack(pos+1,sum+i,i,0);
  54. }
  55. }
  56. }
  57. }
  58. int main()
  59. {
  60. ios_base::sync_with_stdio(0);
  61. cin.tie(0);
  62. cin >> n;
  63. backtrack(1,0,0,0);
  64. }
  65.  
Success #stdin #stdout 0.01s 5288KB
stdin
Standard input is empty
stdout