Sunteți pe pagina 1din 1

7.

Partiiile unei mulimi


Se citete numrul natural nenul n, reprezentnd numrul de elemente ale mulimii A={1,2,,n}. Scriei un program care s afieze toate partiiile mulimii A. Definiie: - Fie A o mulime nevid. O colecie de submulimi nevide S={S1,S2,,Sk} constituie o partiie a mulimii A dac sunt ndeplinite urmtoarele condiii: a) Si Sj = - clasele partiiei sunt disjuncte b) S1US2UUSk = A reuniunea claselor este mulimea A Reprezentarea soluiei: -nc este numrul de clase din partiie -fiecare component xk are valori n mulimea {1,2,.,nc} -soluia are n componente Condiia de validare: - este adevrat pentru orice partiie

Varianta recursiv
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. #include<iostream> using namespace std; int x[31];//partitia int n,nc,nr;//n numarul de elemente //nc numarul de clase //numarul de partitii void tipar() { int i,j; nr++; cout<<"Partitia "<<nr<<": "; for(i=1;i<=nc;i++) { cout<<" { "; for(j=1;j<=n;j++) if(x[j]==i)cout<<j<<' '; cout<<"} "; } cout<<endl; } void back(int k) { int i; if(k==n+1)tipar(); else { for(i=1;i<=nc;i++) { x[k]=i; back(k+1); } nc++; x[k]=nc; back(k+1); nc--; } } int main() { cin>>n; back(1); cout<<nr<<" partitii"; return 0; }