Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <cstring>
- #include <algorithm>
- #define NMax 20
- using namespace std;
- ifstream f("permrep.in");
- ofstream g("permrep.out");
- int n,nr[NMax],s[NMax],uz[NMax],p,N,F[27]; /// uz[i]=numarul curent de aparitii ale valorii i in sirul s
- char cuvant[NMax],Lit[27];
- void gen(int k)
- {
- int i;
- if(k==p+1) /// Solutia este completa
- {
- for(i=1;i<=p;++i)
- g<<Lit[s[i]];
- g<<'\n';
- }
- else /// Continuam generarea
- for(i=1;i<=n;++i)
- if(uz[i]<nr[i]) /// Numarul curent de aparitii ale valorii i este mai mic decat multiplicitatea lui i
- s[k]=i,++uz[i],gen(k+1),--uz[i];
- }
- int main()
- {
- f>>cuvant;
- f.close();
- n=strlen(cuvant);
- for(int i=0;i<=n;++i)
- ++F[cuvant[i]-'a'];
- for(int i=0;i<26;++i)
- if(F[i])
- Lit[++N]=i+'a',nr[N]=F[i];
- for(int i=1;i<=N;++i)
- p+=nr[i];
- gen(1);
- g.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement