Documente Academic
Documente Profesional
Documente Cultură
2017
Bibliografie: Informatica. Manual pentru clasa a XI-a, C++, intensiv, M. Miloescu, E.D.P., Bucureti, 2009
P1/pag.15 Generarea tuturor permutrilor mulimii {1,2,3, ..., n}, n variant iterativ i recursiv.
//Permutari iterativ
#include de <iostream>
using namespace std;
int n,k,ev,as,i; //i poate fi si variabila locala, declarata in fiecare for
typedef int stiva[100];
stiva st;
void init();
int succesor();
int valid();
int solutie();
void tipar();
void bktr_it(); //varianta iterativa
int main()
{ cout<<"n (n>0) = "; cin>>n;
cout<<"Permutarile multimii {1,2,...,"<<n<<"} :\n";
bktr_it();
return 0;
}
void init() //Rulare:
{ st[k]=0; }
int succesor()
{ if(st[k]<n)
{ st[k]=st[k]+1;
return 1; }
else return 0;
}
int valid()
{ for(i=1;i<k;i++)
if(st[k]==st[i])
return 0;
return 1;
}
int solutie()
{ return k==n; }
void tipar()
{ for(i=1;i<=n;i++)
cout<<st[i]<<" ";
cout<<endl;
}
void btkr_it()
{ k=1; init();
while(k>0)
{ as=1; ev=0;
while(as && !ev)
{ as=succesor();
if(as)
ev=valid(); }
if(as)
{ if(solutie())
tipar();
else
{ k++; init(); }
}
else k--;
}
}
}
...