ToniDev

Backtracking Recursiv

Feb 2nd, 2022
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.97 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int st[100], n;
  5.  
  6. void afisare(int k)
  7. {
  8.     for (int i = 1; i <= n ; i++)
  9.     {
  10.         cout << st[i];
  11.     }
  12.  
  13.     cout << endl;
  14. }
  15.  
  16. bool valid(int k)
  17. {
  18.     for (int i = 1; i <= k - 1; i++)
  19.         if (st[k] == st[i])
  20.             return false;
  21.  
  22.     return true; //Returneaza true DOAR DACA nu mai exista elementul
  23. }
  24.  
  25. void bk(int k)
  26. {
  27.     for (int i = 1; i <= n; i++)
  28.     {
  29.         st[k] = i;
  30.  
  31.         if (valid(k) == true) //Verificam sa nu mai existe aceeasi valoare in stiva
  32.             if (k == n)       //Verificam daca k == n, inseamna ca nu mai este loc in stiva deci avem o solutie
  33.                 afisare(k);
  34.             else             //Daca stiva inca NU este plina, trec pe nivelul urmator din stiva.
  35.                 bk(k + 1);   //Apelam recursiv functia bk pentru urmatorul nivel
  36.     }
  37. }
  38.  
  39. int main()
  40. {
  41.     cout << "Introdu cate elemente doresti: ";
  42.     cin >> n;
  43.  
  44.     bk(1);
  45.  
  46.     return 0;
  47. }
Advertisement
Add Comment
Please, Sign In to add comment