Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- int* tab;
- int licznik;
- int liczba_stirlinga(int n, int k)
- {
- int s;
- if( k==n) return 1;
- if(k==0) return 0;
- if(k>n) return 0;
- s=k*liczba_stirlinga(n-1,k)+liczba_stirlinga(n-1,k-1);
- return s;
- }
- int liczba_bela(int n, int k)
- {
- int b=0;
- if (n==0) b=0;
- for(k=0;k<n;k++)
- { b=b+liczba_stirlinga(n,k);}
- return b;
- }
- void print (int n)
- {
- for(int i=0; i<n; i++)
- {
- cout<< tab[i] ;
- }
- cout << "\n";
- }
- int min (int a, int b)
- {
- if(a>b)
- return b;
- else
- return a;
- }
- int max(int a, int b)
- {
- if( a>b)
- return a;
- else return b;
- }
- void bloki (int index, int n, int m, int maxim, int* tab) {
- if (index == n) {
- print(n);licznik++;
- } else {
- for(int i = 1; i <= min(maxim +1,m); i++) {
- tab[index] = i;
- int nowemaxim = min(max(maxim, i), m);
- bloki(index + 1, n, m, nowemaxim, tab);
- }
- }
- }
- int main()
- { int n, k;
- cout<<" Program generujacy k podzialow zbioru n elementowego" <<endl;
- cout<< "Prosze podac liczbe elementow zbioru: n=";
- cin>> n;
- cout<<" Prosze podac liczbe podzialow zbioru: k =";
- cin>>k;
- tab =new int[n];
- bloki(0,n,k,0,tab);
- int b=liczba_bela(n,k);
- cout<<"Liczba wypisanych podzialow to: "<<licznik <<endl;
- cout<<"Liczba elementow zgodnie z liczba Bella ="<<b<<endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement