a53

permutari5

a53
Oct 7th, 2019
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.45 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #define NR 11
  4. using namespace std;
  5. int x[NR],a[NR],MIN[NR],n,Min=1000000001,imin;
  6.  
  7. void init(int k)
  8. {
  9. x[k]=0;
  10. }
  11.  
  12. bool succesor(int k)
  13. {
  14. if(x[k]<n)
  15. return true;
  16. else
  17. return false;
  18. }
  19.  
  20. bool continuare(int k)
  21. {
  22. for(int i=1;i<=k-1;++i) /// Valorile sa fie distincte
  23. if(x[k]==x[i])
  24. return false;
  25. return true;
  26. }
  27.  
  28. bool solutie(int k)
  29. {
  30. if(k==n+1)
  31. return true;
  32. else
  33. return false;
  34. }
  35.  
  36. void afisare()
  37. {
  38. int j=0;
  39. for(int i=1;i<=n+1;++i)
  40. if(i==imin)
  41. cout<<Min<<' ';
  42. else
  43. cout<<MIN[x[++j]]<<' ';
  44. cout<<'\n';
  45. }
  46.  
  47. void backtracking() /// Generam permutarile multimii {1,2,...,n}
  48. {
  49. int k=1;
  50. init(k);
  51. while(k)
  52. if(solutie(k))
  53. {
  54. afisare();
  55. --k;
  56. }
  57. else
  58. if(succesor(k))
  59. {
  60. ++x[k];
  61. if(continuare(k))
  62. ++k;
  63. }
  64. else
  65. {
  66. init(k);
  67. --k;
  68. }
  69. }
  70.  
  71. int main()
  72. {
  73. cin>>n;
  74. for(int i=1;i<=n;++i)
  75. {
  76. cin>>a[i];
  77. if(a[i]<Min)
  78. Min=a[i],imin=i;
  79. }
  80. int j=0;
  81. for(int i=1;i<=n;++i)
  82. if(i!=imin)
  83. MIN[++j]=a[i];
  84. n=j;
  85. sort(MIN+1,MIN+n+1);
  86. backtracking();
  87. return 0;
  88. }
Advertisement
Add Comment
Please, Sign In to add comment