Advertisement
a53

permutari_pfp

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