sâmbătă, 3 decembrie 2011

Generarea functiilor surjective

#include <fstream>
#include <iostream>
using namespace std;
#define DMax 20
int n, m, f[DMax], Im[DMax];
ofstream fout("surj.out");           //fisierul de iesire
void generare(int);
void afisare(void);
int main(void)
{ cout<<"n, m= "; cin>>n>>m;
  generare(0);
  fout.close();
  return 0; }
void generare(int k)
/* cand apelam generare(k) elementele f[0], f[1], ...,
   f[k-1] sunt deja fixate */
{int j;
 if (k==n) afisare();
    else                              //continuam generarea
    for (j=1; j<=m; j++)
        {f[k]=j;  //imaginea lui k va fi j
         Im[j]++; //numaram o noua aparitie a lui j in Im f
         generare(k+1);
         Im[j]--;}//restauram numarul de aparitii ale lui j
}

void afisare(void)
{int i;
 for (i=1; i<=m; i++) //verific daca functia e surjectiva
     if (!Im[i]) return;
 for (i=0; i<n; i++) fout<<f[i]<<' ';
 fout<<endl; }

Niciun comentariu:

Trimiteți un comentariu