Advertisement
a53

perm_min_max

a53
Oct 7th, 2019
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.61 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #define NR 11
  4. using namespace std;
  5. int x[NR],a[NR],MinMax[NR],n,Min=1000000001,Max=-1,imin,imax;
  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+2;++i)
  40. if(i==imin)
  41. cout<<Min<<' ';
  42. else
  43. if(i==imax)
  44. cout<<Max<<' ';
  45. else
  46. cout<<MinMax[x[++j]]<<' ';
  47. cout<<'\n';
  48. }
  49.  
  50. void backtracking() /// Generam permutarile multimii {1,2,...,n}
  51. {
  52. int k=1;
  53. init(k);
  54. while(k)
  55. if(solutie(k))
  56. {
  57. afisare();
  58. --k;
  59. }
  60. else
  61. if(succesor(k))
  62. {
  63. ++x[k];
  64. if(continuare(k))
  65. ++k;
  66. }
  67. else
  68. {
  69. init(k);
  70. --k;
  71. }
  72. }
  73.  
  74. int main()
  75. {
  76. cin>>n;
  77. for(int i=1;i<=n;++i)
  78. {
  79. cin>>a[i];
  80. if(a[i]<Min)
  81. Min=a[i],imin=i;
  82. if(a[i]>Max)
  83. Max=a[i],imax=i;
  84. }
  85. int j=0;
  86. for(int i=1;i<=n;++i)
  87. if(i!=imin&&i!=imax)
  88. MinMax[++j]=a[i];
  89. n=j;
  90. sort(MinMax+1,MinMax+n+1);
  91. backtracking();
  92. return 0;
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement