OneDrain

Untitled

Oct 10th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.41 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int n, st[101], p; // st = stiva; p = limita de elemente de la combinari.
  6.  
  7. bool valid(int k) // Verificam daca solutia gasita este solutie partiala.
  8. {
  9.     if(k > 1 && st[k] <= st[k - 1]) /* Nu avem cum sa avem k < 1 din moment ce numaratoarea nivelelor incepe de la 1
  10.                                     Comparam ultimul index din stiva cu cel dinaintea lui. Daca ultimul index e mai mic
  11.                                     decat cel dinaintea lui, e de rau, avand in vedere proprietatea de baza a combinarilor
  12.                                     (elementele trebuie sa fie strict crescatoare intre ele).*/
  13.         return 0;
  14.     return 1;
  15. }
  16.  
  17. bool solutie(int k) // Verificam daca solutia gasita este solutie finala.
  18. {
  19.     return k == p; // Verificam daca avem p elemente per nivel (k = nivel)
  20. }
  21.  
  22. void afis(int k)
  23. {
  24.     for(int i = 1; i <= k; i++)
  25.         cout << st[i] << " ";
  26.     cout << endl;
  27. }
  28.  
  29. void bk(int k)
  30. {
  31.     for(int i = 1; i <= n; i++)
  32.     {
  33.         st[k] = i; // Introducem indicii in stiva.
  34.         if(valid(k)) // Daca avem solutie partiala
  35.             if(solutie(k)) // Daca acea solutie partiala este si finala.
  36.                 afis(k); // Afisam indicii corespunzatori.
  37.         else
  38.             bk(k + 1); // Altfel ne ducem mai departe cu un nivel si repetam procesul.
  39.     }
  40. }
  41.  
  42. int main()
  43. {
  44.     cin >> n >> p;
  45.     bk(1);
  46.     return 0;
  47. }
Advertisement
Add Comment
Please, Sign In to add comment