Advertisement
edutedu

submultimile unei multimi backtracking

Nov 20th, 2019
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.92 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4. int sol, n, x[100];
  5. void init(int k)
  6. {
  7. x[k]=-1;
  8. }
  9. int existaSuccesor(int k)
  10. {
  11. return x[k]<1;
  12. }
  13. int cont(int k)
  14. {
  15. return 1;
  16. }
  17. int solutie(int k)
  18. {
  19. return k==n;
  20. }
  21. void tipar()
  22. {
  23. sol++;
  24. for(int i=1; i<=n; i++)
  25. {
  26. if(x[i])
  27. cout<<i<<" ";
  28. }
  29. cout<<endl;
  30. }
  31. void back()
  32. {
  33. int k=1;
  34. init(1);
  35. while(k>0)
  36. {
  37. if(existaSuccesor(k))
  38. {
  39. x[k]++;
  40. if(cont(k))
  41. if(solutie(k))
  42. tipar();
  43. else
  44. {
  45. k++;
  46. init(k);
  47. }
  48. }
  49. else
  50. k--;
  51. }
  52. }
  53. int main()
  54. {
  55. cout<<"Cate cadouri sunt? "; cin>>n;
  56. cout<<"Submultimile de cadouri sunt: "<<endl;
  57. back();
  58. cout<<"Sunt "<<sol<<" submultimi";
  59. return 0;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement