Sunteți pe pagina 1din 3

Generarea aranjamentelor

#include <iostream>
using namespace std;
int st[100],n,c;
int valid(int p)
{ int i;
for(i=1;i<p;i++)
if(st[p]==st[i])
return 0;
return 1;
}
void tipar(int p)
{
for(int i=1;i<=p;i++)
cout<<st[i]<<" ";
cout<<endl;
}
void backt()
{ int p;
p=1; //plecam de la primul nivel
st[p]=0; //initializam nivelul cu 0
while (p>0) //cat timp stiva nu este vida
{ if (st[p]<n ) //mai exista valori neincercate pe nivelul p
{
st[p]=st[p]+1; // st[p]<-<o noua valoare din multimea valorilor posibile>}
if (valid(p) )//daca elementul de pe pozitia p indeplineste conditiile
if (p==c)//daca s-a completat stiva
tipar(p); //afisam solutia finala
else
{
p=p+1; //trecem la nivelul urmator
st[p]=0;//initializam valoarea de pe nivel cu 0
}
}
else
p=p-1; //pas inapoi
}
}
int main()
{
cout<<"n=";
cin>>n;
cout<<"c=";cin>>c;
backt();
}

Generarea permutarilor:
#include <iostream>

using namespace std;


int st[100],n;
int valid(int p)
{ int i;
for(i=1;i<p;i++)
if(st[p]==st[i])
return 0;
return 1;
}
void tipar(int p)
{
for(int i=1;i<=p;i++)
cout<<st[i]<<" ";
cout<<endl;
}
void backt()
{ int p;
p=1; //plecam de la primul nivel
st[p]=0; //initializam nivelul cu 0/
while (p>0) //cat timp stiva nu este vida
{ if (st[p]<n ) //mai exista valori neincercate pe nivelul p
{
st[p]=st[p]+1; // st[p]<-<o noua valoare din multimea valorilor posibile>}
if (valid(p) )
if (p==n)
tipar(p); //solutia este finala
else
{
p=p+1; //trecem la nivelul urmator
st[p]=0;//initializam valoarea de pe nivel cu 0
}
}
else
p=p-1; //pas inapoi
}
}
int main()
{
cout<<"n=";
cin>>n;
backt();
}

Generarea combinarilor:
#include <iostream>
using namespace std;
int st[100],n,k;

int valid(int p)
{
if(st[p-1]>st[p])
return 0;
if(st[p-1]==st[p])
return 0;
return 1;
}
void tipar(int p)
{
for(int i=1;i<=p;i++)
cout<<st[i]<<" ";
cout<<endl;
}
void backt()
{ int p;
p=1; //plecam de la primul nivel
st[p]=0; //initializam nivelul cu 0/
while (p>0) //cat timp stiva nu este vida
{ if (st[p]<n) //mai exista valori neincercate pe nivelul p
{
st[p]=st[p]+1; // st[p]<-<o noua valoare din multimea valorilor posibile>}
if (valid(p))
if (p==k)
tipar(p); //solutia este finala
else
{
p=p+1; //trecem la nivelul urmator
st[p]=0;//initializam valoarea de pe nivel cu 0
}
}
else
p=p-1; //pas inapoi
}
}
int main()
{
cout<<"n=";
cin>>n;cin>>k;
backt();
}