#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