JustSaiyan4u

BACKTRACKING submultimile unei multimi/combinari de n cate p

Mar 4th, 2020
377
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.86 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. using namespace std;
  4.  
  5. int s[100],k,n,p;
  6.  
  7. void init()
  8. {
  9.     if(k==1)
  10.     s[k]=0;
  11.     else
  12.         s[k]=s[k-1];
  13. }
  14.  
  15. int am_succesor()
  16. {
  17.     if(s[k]<n-p+k)
  18.     {
  19.         s[k]++;
  20.         return 1;
  21.     }
  22.     else return 0;
  23. }
  24.  
  25. int e_valid()
  26. {
  27.     for(int i=1;i<k;i++)
  28.       if(s[k]==s[i])
  29.         return 0;
  30.  
  31.       return 1;
  32.  
  33. }
  34.  
  35. int solutie()
  36. {
  37.     return k==p;
  38. }
  39.  
  40. void tip()
  41. {
  42.     for(int i=1;i<=p;i++)
  43.         cout<<s[i]<<" ";
  44.  
  45.         cout<<endl;
  46. }
  47.  
  48. void back()
  49. {
  50.     int as;
  51.     k=1;
  52.     init();
  53.     while(k>0)
  54.     {
  55.         do{}while((as=am_succesor())&&!e_valid());
  56.         if(as)
  57.             if(solutie()) tip();
  58.         else{
  59.             k++;
  60.             init();}
  61.         else k--;
  62.         }
  63.     }
  64.  
  65.  
  66. int main()
  67. {
  68.     cout<<"n= "; cin>>n;
  69.     cout<<"p= "; cin>>p;
  70.     back();
  71. }
Advertisement
Add Comment
Please, Sign In to add comment