Advertisement
Hezov

Generarea partitiilor

Jan 17th, 2025
31
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.30 KB | Source Code | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4. int n , mat[101][101],cnt;
  5. // mat[i][0] - dimensiunea submultimii.
  6. void gen(int nr, int cateSubmultimi)
  7. {
  8.     if(nr == n + 1)
  9.     {
  10.         cnt++;
  11.         cout <<"\t";
  12.         for(int i = 1;i<=cateSubmultimi;i++)
  13.         {
  14.             cout << "{ ";
  15.             for(int j = 1;mat[i][j]!=0;j++)
  16.                 cout << mat[i][j] << ' ';
  17.             cout << "}";
  18.             cout << "  ";
  19.         }
  20.         cout << '\n';
  21.         return;
  22.     }
  23.     /// Adaugam elementul la una dintre submultimile existente.
  24.     for(int i = 1;i<= cateSubmultimi;i++)
  25.     {
  26.         mat[i][0]++;
  27.         mat[i][mat[i][0]] = nr;
  28.         gen(nr+1,cateSubmultimi);
  29.         mat[i][mat[i][0]] = 0;
  30.         mat[i][0]--;
  31.     }
  32.     /// Adaugam elementul intr-o noua submultime
  33.     if(mat[cateSubmultimi][0]!=0)
  34.     {
  35.         cateSubmultimi++;
  36.         mat[cateSubmultimi][0] = 1;
  37.         mat[cateSubmultimi][1] = nr;
  38.         gen(nr + 1, cateSubmultimi);
  39.         mat[cateSubmultimi][1] = 0;
  40.         mat[cateSubmultimi][0] = 0;
  41.         cateSubmultimi--;
  42.     }
  43.  
  44. }
  45. int main() {
  46.     cout<<"\n\n\tPartiile multimii {1,2,3.....,n}\n" << "\n\tDati valoarea lui n: ";
  47.     cin >> n;
  48.     cout << '\n';
  49.     gen(1,1);
  50.     cout <<"\n\tNumar solutii: " << cnt << '\n';
  51.     return 0;
  52. }
  53.  
Tags: Backtracking
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement