#include <fstream>
#include <iostream>
using namespace std;
int n; //numarul de elemente din multime
int nc; //numarul de clase
int P[30]; //partitia
int NrP; //numarul de partitii
ofstream fout("part.out");//fisierul de iesire
void Afisare()
{ fout<<"Partitia "<<++NrP<<": ";
for (int j=1; j<=nc; j++)//afisez clasa nr. j
{fout<<" { ";
for (int i=1; i<=n; i++)
if (P[i]==j) fout<<i<<' ';
fout<<'}';}
fout<<endl; }
void GenPartitie(int k)
{/*cand apelam GenPartitie(k), in vectorul P pe primele k-1
pozitii se afla o partitie a multimii 1,2,...,k-1
formata din NC clase */
if (k-1==n) Afisare(); //partitia este complet construita
else
{//plasam elementul k in una din clasele existente
for (int j=1; j<=nc; j++)
{P[k]=j;
GenPartitie(k+1);}
//sau elementul k reprezinta o clasa separata
nc++; //maresc numarul de clase
P[k]=nc;
GenPartitie(k+1);
nc--; } //restaurez numarul de clase
}
int main()
{cout<<"n= "; cin>>n;
GenPartitie(1);
fout.close(); return 0; }
Niciun comentariu:
Trimiteți un comentariu