0% found this document useful (0 votes)
48 views

Probleme Info

1. The document contains code for generating permutations, arrangements, and combinations of numbers or characters using backtracking. It includes functions for initializing arrays, checking if a value exists, checking constraints, printing solutions, and the main backtracking logic. 2. Several examples are provided that generate permutations of numbers, characters, or vectors based on different constraints. This includes generating numbers with even digits, distinct even digits, rearrangements that separate positives/negatives/odds/evens, and permutations of letters. 3. The code shows how backtracking can be used to systematically generate all valid solutions that satisfy the given constraints for different problem types including permutations, arrangements, combinations, and rearrangements. Functions are reused across examples with

Uploaded by

Cristina Surdu
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
48 views

Probleme Info

1. The document contains code for generating permutations, arrangements, and combinations of numbers or characters using backtracking. It includes functions for initializing arrays, checking if a value exists, checking constraints, printing solutions, and the main backtracking logic. 2. Several examples are provided that generate permutations of numbers, characters, or vectors based on different constraints. This includes generating numbers with even digits, distinct even digits, rearrangements that separate positives/negatives/odds/evens, and permutations of letters. 3. The code shows how backtracking can be used to systematically generate all valid solutions that satisfy the given constraints for different problem types including permutations, arrangements, combinations, and rearrangements. Functions are reused across examples with

Uploaded by

Cristina Surdu
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 13

Permutari

#include<iostream.h>
#include<conio.h>
#include<math.h>
int n,x[100],k,p;
void citire()
{cout<<"n=";
cin>>n;
}
void init(int k)
{x[k]=0;
}
int exista(int k)
{if(x[k]<n)
return 1;
return 0;
}
int cont(int k)
{int i;
for(i=1;i<k;i++)
if(x[i]==x[k])
return 0;
return 1;
}
int solutie(int k)
{if(k==n)
return 1;
return 0;
}
void tiparire(int k)
{int i;
for(i=1;i<=k;i++)
cout<<x[i]<<" ";
cout<<endl;
}
void bkt()
{
k=1;
init(k);
while(k>0)
if(exista (k))
{x[k]=x[k]
+1;
if(cont(k))
if(solutie(k))
tiparire(k);
else
{
k=k+1;

Aranjamente
#include<iostream>
#include<conio.h>
#include<math.h>
using namespace std;
int n,x[100],k,p;
void citire()
{cout<<"n=";
cin>>n;
cout<<"p=";cin>>p;
}
void init(int k)
{x[k]=0;
}
int exista(int k)
{if(x[k]<n)
return 1;
return 0;
}
int cont(int k)
{int i;
for(i=1;i<k;i++)
if(x[i]==x[k])
return 0;
return 1;
}
int solutie(int k)
{if(k==p)
return 1;
return 0;
}
void tiparire(int k)
{int i;
for(i=1;i<=k;i++)
cout<<x[i]<<" ";
cout<<endl;
}
void bkt()
{
k=1;
init(k);
while(k>0)
if(exista (k))
{x[k]=x[k]
+1;
if(cont(k))
if(solutie(k))
else
{

init(k);
else
k--;
}
int main()
{citire();
bkt();
getche();
}

Combinari
#include<iostream>
#include<conio.h>
#include<math.h>
using namespace std;
int n,x[100],k,p;
void citire()
{cout<<"n=";
cin>>n;
cout<<"p=";cin>>p;
}
void init(int k)
{x[k]=0;
}
int exista(int k)
{if(x[k]<n)
return 1;
return 0;
}
int cont(int k)
{ if(k>1)
if(x[k]<=x[k-1])
return 0;
return 1;
}
int solutie(int k)
{if(k==p)
return 1;
return 0;
}
void tiparire(int k)
{int i;
for(i=1;i<=k;i++)
cout<<x[i]<<" ";
cout<<endl;
}
void bkt()
{
k=1;
init(k);
while(k>0)
if(exista (k))
{x[k]=x[k]
+1;
if(cont(k))
if(solutie(k))

tiparire(k);

{citire();
bkt();
return 0;
}

}
k=k+1;

tiparire(k);

else
{

k=k+1;

init(k);
}
else
k--;
}
int main()

init(k);

}
else
k--;

}
int main()

{citire();
bkt();

1. Ion.Se citeste un sir


de caractere
distincte.Sa se afiseze
toate posibilitatile de
scriere a acestora.
#include<iostream>
#include<conio.h>
#include<string.h>
using namespace std;
int j,n,x[100],k,p;
char s[10];
void citire()
{
cin>>s;
n=strlen(s);
}
void init(int k)
{x[k]=0;
}
int exista(int k)
{if(x[k]<n)
return 1;
return 0;
}
int cont(int k)
{if(k>1)
if(x[k]<x[k-1])
return 0;
return 1;
}
int solutie(int k,int p)
{if(k==p)
return 1;
return 0;
}
void tiparire(int k)
{int i;
for(i=1;i<=k;i++)
cout<<s[x[i]-1]<<" ";
cout<<endl;
}
void bkt(int p)
{
k=1;
init(k);
while(k>0)
if(exista (k))
{x[k]=x[k]+1;

return 0;
}

if(cont(k))
if(solutie(k,p))
tiparire(k);
else
{
k=k+1;
init(k);
}
}
else
k--;
}
int main()
{citire();
for(j=1;j<=n;j++)
{
p=j;
bkt(p);
}
getche();
}

return 1;
return 0;
}
int cont(int k)
{if(k>1)
if(x[k]<x[k-1])
return 0;
return 1;
}
int solutie(int k)
{if(k==n)
return 1;
return 0;
}
void tiparire(int k)
{int i;
for(i=1;i<=k;i++)
cout<<x[i]<<" ";
cout<<endl;
}
void bkt()
{
k=1;
init(k);
while(k>0)
if(exista (k))
{x[k]=x[k]+2;

2.Gigel: Lui Gigel ii


plac doar numerele
formate din cifre
pare.Scrieti un
program cu toate
nr.care ii plac lui Gigel
de n cifre.

if(cont(k))
if(solutie(k))
tiparire(k);
else
{
k=k+1;

#include<iostream>
#include<conio.h>
using namespace std;
int n,x[100],k,p;
void citire()
{cout<<"n=";
cin>>n;
}
void init(int k)
{x[k]=0;
}
int exista(int k)
{if(x[k]<2*n)

init(k);
}
}
else
k--;
}
int main()
{citire();
bkt();
return 0;
}

3.Se citeste un vector


de n elemente
(numere reale).Sa se
afiseze toate
permutarile
elementelor
vectorului.

{x[k]=x[k]+1;
if(cont(k))
if(solutie(k))
tiparire(k);
else

#include<iostream>
#include<conio.h>
using namespace std;
int n,x[100],k,p,v[100];
void citire()
{
int i;
cin>>n;
for(i=1;i<=n;i++)
cin>>v[i];
}
void init(int k)
{x[k]=0;
}
int exista(int k)
{if(x[k]<n)
return 1;
return 0;
}
int cont(int k)
{int i;
for(i=1;i<k;i++)
if(x[i]==x[k])
return 0;
return 1;
}
int solutie(int k)
{if(k==n)
return 1;
return 0;
}
void tiparire(int k)
{int i;
for(i=1;i<=k;i++)
cout<<v[x[i]]<<" ";
cout<<endl;
}
void bkt()
{
k=1;
init(k);
while(k>0)
if(exista (k))

{
k=k+1;
init(k);
}
}
else
k--;
}
int main()
{citire();
bkt();
return 0;
}

4.Gigel 2: Lui Gigel ii


plac doar numerele
formate din cifre pare
distincte.Scrieti un
program cu toate
nr.care ii plac lui Gigel
de n cifre.
#include<iostream>
#include<conio.h>
using namespace std;
int n,x[100],k,p;
void citire()
{cout<<"n=";
cin>>n;
}
void init(int k)
{
if(k==1)
x[k]=0;
else
x[k]=-2;
}
int exista(int k)

{if(x[k]<8)
return 1;
return 0;
}
int cont(int k)
{if(k>1)
if(x[k-1]>=x[k])
return 0;
return 1;
}
int solutie(int k)
{if(k==n)
return 1;
return 0;
}
void tiparire(int k)
{int i;
for(i=1;i<=k;i++)
cout<<x[i]<<" ";
cout<<endl;
}
void bkt()
{
k=1;
init(k);
while(k>0)
if(exista (k))
{x[k]=x[k]+2;
if(cont(k))
if(solutie(k))
tiparire(k);
else
{
k=k+1;
init(k);
}
}
else
k--;
}
int main()
{citire();
bkt();
return 0;
}

5.Se citesc elementele unui sir e numere intregi.Sa se rearanjeze sirul astfel
incat sa nu fie doua numere negative/pozitive/impare/pare alaturate.
{x[k]=x[k]+1;
if(x[k]==x[i])
if(cont(k))
ok=0;
nr pozitive;
if((k>1)&&(v[x[k]]<0)&&(
#include<iostream>
if(solutie(k))
v[x[k-1]]<0))
#include<conio.h>
ok=0;
#include<string.h>
{j=j+1;
return ok;
using namespace std;
}
int
tiparire(k);}
int solutie(int k)
j=0,n,x[100],k,p,v[100];
{if(k==n)
void citire()
else
return 1;
{int i;
{
return 0;
cin>>n;
}
for(i=1;i<=n;i++)
k=k+1;
void tiparire(int k)
cin>>v[i];
{int i;
}
init(k);
for(i=1;i<=k;i++)
void init(int k)
}
cout<<v[x[i]]<<" ";
{x[k]=0;
}
cout<<endl;
}
else
}
int exista(int k)
k--;
void bkt()
{if(x[k]<n)
{
return 1;
}
k=1;
return 0;
int main()
init(k);
}
{citire();
while(k>0)
int cont(int k)
bkt();
if(exista (k))
{int i,ok=1;
cout<<j;
for(i=1;i<k;i++)
return 0;
{x[k]=x[k]+1;
if(x[k]==x[i])
}
if(cont(k))
ok=0;
if((k>1)&&(v[x[k]]>0)&&(
nr negative;
if(solutie(k))
v[x[k-1]]>0))
#include<iostream>
ok=0;
#include<conio.h>
{j=j+1;
return ok;
#include<string.h>
}
using namespace std;
tiparire(k);}
int solutie(int k)
int
{if(k==n)
else
j=0,n,x[100],k,p,v[100];
return 1;
{
void citire()
return 0;
{int i;
}
k=k+1;
cin>>n;
void tiparire(int k)
for(i=1;i<=n;i++)
{int i;
init(k);
cin>>v[i];
for(i=1;i<=k;i++)
}
}
cout<<v[x[i]]<<" ";
}
void init(int k)
cout<<endl;
else
{x[k]=0;
}
k--;
}
void bkt()
int exista(int k)
{
}
{if(x[k]<n)
k=1;
int main()
return 1;
init(k);
{citire();
return 0;
while(k>0)
bkt();
}
if(exista (k))
cout<<j;
int cont(int k)
return 0;
{int i,ok=1;
}
for(i=1;i<k;i++)

nr impare;
#include<iostream>
#include<conio.h>
#include<string.h>
using namespace std;
int
j=0,n,x[100],k,p,v[100];
void citire()
{int i;
cin>>n;
for(i=1;i<=n;i++)
cin>>v[i];
}
void init(int k)
{x[k]=0;
}
int exista(int k)
{if(x[k]<n)
return 1;
return 0;
}
int cont(int k)
{int i,ok=1;
for(i=1;i<k;i++)
if(x[k]==x[i])
ok=0;
if((k>1)&&(v[x[k]]%2!
=0)&&(v[x[k-1]]%2!=0))
ok=0;
return ok;
}
int solutie(int k)
{if(k==n)
return 1;
return 0;
}
void tiparire(int k)
{int i;
for(i=1;i<=k;i++)
cout<<v[x[i]]<<" ";
cout<<endl;
}
void bkt()
{
k=1;
init(k);
while(k>0)
if(exista (k))
{x[k]=x[k]+1;
if(cont(k))
if(solutie(k))
6.Se citeste un cuvant
de maxim 10 litere.Sa se

{j=j+1;
tiparire(k);}
else
{
k=k+1;
init(k);
}
}
else
k--;
}
int main()
{citire();
bkt();
cout<<j;
return 0;
}

if((k>1)&&(v[x[k]]
%2==0)&&(v[x[k-1]]
%2==0))
ok=0;
return ok;
}
int solutie(int k)
{if(k==n)
return 1;
return 0;
}
void tiparire(int k)
{int i;
for(i=1;i<=k;i++)
cout<<v[x[i]]<<" ";
cout<<endl;
}
void bkt()
{
k=1;
init(k);
while(k>0)
if(exista (k))
{x[k]=x[k]+1;

nr pare;
#include<iostream>
#include<conio.h>
#include<string.h>
using namespace std;
int
j=0,n,x[100],k,p,v[100];
void citire()
{int i;
cin>>n;
for(i=1;i<=n;i++)
cin>>v[i];
}
void init(int k)
{x[k]=0;
}
int exista(int k)
{if(x[k]<n)
return 1;
return 0;
}
int cont(int k)
{int i,ok=1;
for(i=1;i<k;i++)
if(x[k]==x[i])
ok=0;
afiseze toate
posibilitati;e de a obtine

if(cont(k))
if(solutie(k))
{j=j+1;
tiparire(k);}
else
{
k=k+1;
init(k);
}
}
else
k--;
}
int main()
{citire();
bkt();
cout<<j;
return 0;
}
cuvintele cu literele
cuvantului dat.

#include<iostream>
#include<conio.h>
#include<string.h>
using namespace std;
int j,n,x[100],k,p;
char s[10];
void citire()
{
cin>>s;
n=strlen(s);
}
void init(int k)
{x[k]=0;
}
int exista(int k)
{if(x[k]<n)
return 1;
return 0;
}
int cont(int k)
{if(k>1)
if(x[k]<x[k-1])
return 0;
return 1;
}
int solutie(int k,int p)
{if(k==p)
return 1;
return 0;
}
void tiparire(int k)
{int i;
for(i=1;i<=k;i++)
cout<<s[x[i]-1]<<" ";
cout<<endl;
}
void bkt(int p)
{
k=1;
init(k);
while(k>0)
if(exista (k))
{x[k]=x[k]+1;
if(cont(k))

if(solutie(k,p))
tiparire(k);
else
{
k=k+1;
init(k);
}
}
else
k--;
}
int main()
{citire();
for(j=1;j<=n;j++)
{
p=j;
bkt(p);
}
getche();
}

7.Pentru un nr n citit
de la tastatura scrieti
un program care sa
afiseze toate
secventele de n litere
din
multimea{a,r,g,v}.Nu
se plaseaza doua
litere identice
consecutive si se
utilizeaza n/2 litere
din n.
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<string.h>
int n,x[100],i,k,p;
char cuv[10];
void citire()

8.Problema tricolorului: Sa se afiseze toate steagurile care


contin:alb,albastru,rosu,verde,galben,portocaliu.
#include<iostream>
cin>>p;
#include<conio.h>
cin>>n;
#include<math.h>
for(i=1;i<=n;i++)
using namespace std;
cin>>v[i];
int n,x[100],k,p;
}
char v[10][10];
void init(int k)
void citire()
{x[k]=0;
{int i;
}

{cuv='ARGV';
n=4;}
void init(int k)
{x[k]=0;}
int exista(int k)
{if (x[k]<n)
return 1;
return 0;}
int cont(int k)
{if(k==1)
return 1;
if(x[k]==x[k-1])
return 0;
return 1;
}
int solutie (int k)
{p=0;
if(k==n)
{for(i=1;i<=k;i++)
if(strcmp(x[i]-1,'R')==0)
p++;
if(p==2)
return 1;}
return 0;}
void tiparire(int k)
{for(i=1;i<=k;i++)
cout<<cuv[x[i]-1]<<" ";
cout<<endl;}
void bkt()
{k=1;
init(k);
while(k>0)
if (exista(k))
{x[k]=x[k]+1;
if (cont(k))
if(solutie(k))
tiparire(k);
else
{k++;
init(k);}}
else
k--;}
int main()
{citire();
bkt();
getche(

int exista(int k)
{if(x[k]<n)
return 1;
return 0;
}
int cont(int k)
{int i;
for(i=1;i<k;i++)

if(x[i]==x[k])
return 0;
return 1;
}
int solutie(int k)
{if(k==p)
return 1;
return 0;
}
void tiparire(int k)
{int i;
for(i=1;i<=k;i++)
cout<<v[x[i]]<<" ";
cout<<endl;
}
void bkt()

{
k=1;
init(k);
while(k>0)
if(exista (k))
{x[k]=x[k]
+1;
if(cont(k))
if(solutie(k))
tiparire(k);
else
{

init(k);
}
}
else
k--;
}
int main()
{citire();
bkt();
return 0;
}

k=k+1;
9.Problema turnurilor: Se dau n cuburi numerotate de la 1 la n de laturi li si ci (i de
la 1 la n),fiecare culoare fiind codificata cu un caracter.Sa se tipareasca toate
turnurile care se pot forma luand k cuburi din cele n disponibile astfel incat laturile
cuburilor din turn sa fie in ordine crescatoare,iar culorile a oricaror doua cuburi din
turn sa fie diferite.Sa se afiseze turnul de inaltime maxima (care are suma
inaltimilor maxima).
#include<iostream.
int exista(int k)
cout<<v[x[i]].l<<v[
{x[k]=x[k]+1;
h>
{if (x[k]<n)
x[i]].p<<" ";
if (cont(k))
#include<conio.h>
return 1;
cout<<endl;}
if(cuburi(k))
#include<math.h>
return 0;}
int cuburi(int k)
if(solutie(k))
#include<string.h>
int cont(int k)
{if(k>1)
tiparire(k);
typedef struct()
{for(i=1;i<=k;i++)
if(v[x[kelse
{int l;
if(x[i]==x[k])
1]].l>v[x[k]].l ||
{k++;
char c[1];}v[100];
return 0;
strcmp(v[x[kinit(k);}}
int n,h,p,x[100],i,k;
return 1;
1]].c,v[x[k]].c)==0)
else
void citire()
}
return 0;
k--;}
{cin>>p;cin>>n;
int solutie (int k)
return 1;}
int main()
for(i=1;i<=v;i++)
{if(k==p)
void bkt()
{citire();
cin>>v[i].l>>v[i].c;
return 1;
{k=1;
bkt();
}
return 0;}
init(k);
void init(int k)
void tiparire(int k)
while(k>0)
{x[k]=0;}
{for(i=1;i<=k;i++)
if (exista(k))

10.Se citeste un nr x.Sa se afiseze toate numerele care se pot forma cu cifrele
lui x.
a)cu toate cifrele;

#include<iostream>
#include<conio.h>
using namespace std;
int
n=0,x[100],k,nr,v[100];
void citire()
{
cin>>nr;
while(nr!=0)
{
n=n+1;
v[n]=nr%10;
nr=nr/10;
}
}
void init(int k)
{x[k]=0;
}
int exista(int k)
{if(x[k]<n)
return 1;
return 0;
}
int cont(int k)

{int i;
for(i=1;i<k;i++)
if(x[i]==x[k])
return 0;
return 1;
}
int solutie(int k)
{if(k==n)
return 1;
return 0;
}
void tiparire(int k)
{int i;
for(i=1;i<=k;i++)
cout<<v[x[i]];
cout<<endl;
}
void bkt()
{
k=1;
init(k);
while(k>0)
if(exista (k))
{x[k]=x[k]+1;

if(cont(k))

if(solutie(k))
tiparire(k);
else
{
k=k+1;
init(k);
}
}
else
k--;
}
int main()
{citire();
bkt();
return 0;}

b)cu o parte.
#include<iostream>
#include<conio.h>
#include<string.h>
using namespace std;
int
v[100],n=0,x[100],k,nr;
char s[10];
void citire()
{
cin>>nr;
while(nr!=0)
{
n=n+1;
v[n]=nr%10;
nr=nr/10;
}
}
void init(int k)
{x[k]=0;
}
int exista(int k)

{if(x[k]<n)
return 1;
return 0;
}
int solutie(int k)
{if(k<=n)
return 1;

while(k>0)
if(exista (k))
{x[k]=x[k]+1;
if(solutie(k))
{tiparire(k);
k=k+1;

return 0;
}
void tiparire(int k)
{int i;
for(i=1;i<=k;i++)
cout<<v[x[i]]<<" ";
cout<<endl;
}
void bkt()
{
k=1;
init(k);

init(k);
}
}
else
k--;
}
int main()
{citire();
bkt();
return 0;

11.Scrieti un program care afiseaza toate nr.de n cifre,n<=10,format numai


din cifre distincte si care sunt divizibile cu 4.
#include<iostream>
#include<conio.h>
#include<math.h>
using namespace std;
int n,x[100],i,k,p;
void citire()
{cout<<"n=";
cin>>n;
}
void init(int k)
{if(k==1)
x[k]=0;
else
x[k]=-1;
}
int exista(int k)
{if(x[k]<9)
return 1;
return 0;
}
int cont(int k)
{int i;
for(i=1;i<=k;i++)
if(x[i]==x[k])

return 0;
return 1;
}
int solutie(int k)
{if(k==n)
return 1;
return 0;
}
void tiparire(int k)
{long s=0;
for(i=1;i<=k;i++)
s=s*10+x[i];
if(s%4==0)
cout<<s;
cout<<endl;
}
void bkt()
{
k=1;x[k]=1;
init(k);
while(k>=1)
if(exista (k))
{x[k]=x[k]+1;

if(cont(k))
if(solutie(k))
tiparire(k);
else
{
k=k+1;
init(k);
}
}
else
k--;
}
int main()
{
citire();
bkt();
getche();

12.Sa se determine toate solutiile ecuatiei x+y+z+xt= 150;


#include<iostream>
#include<conio.h>
#include<math.h>
using namespace std;
int i,k,x[100],n;
void init(int k)
{x[k]=-1;}
int exista(int k)
{if(x[k]<150)
return 1;
return 0;}
int cont(int k)
{if(!
((x[1]+x[2]+x[3]+x[1
]*x[4])==150))

return 1;
return 0;}
int solutie(int k)
{if (k==4)
return 1;
return 0;}
void tiparire(int k)
{for (i=1;i<=k;i++)
cout<<x[i]<<" ";
}
void bkt()
{k=1;
init(k);
while(k>0)
if(exista(k))

{x[k]=x[k]+1;
if (cont(k))
if(solutie(k))
tiparire(k);
else
{k++;
init(k);}}
else
k--;}
int main()
{
bkt();
return 0;
}

13.Problema cumparaturilor: Se citesc de la tastatura n produse.Un

cumparator are o suma de bani S si doreste sa cumpere doua produse


diferite.Sa se determine toate posibilitatile de a cheltui bani.
#include<iostre
if(z==s)
cin>>v[i].p>>v[
tiparire(k);
am>
return 0;
i].nume;
#include<conio.
return 1;
else
h>
}
}
#include<math.
void tiparire(int
{
void init(int k)
h>
k)
{x[k]=0;
#include<string.
{int i;
k=k+1;
}
h>
for(i=1;i<=k;i+
int exista(int k)
using
+)
init(k);
{if(x[k]<n)
namespace std;
return 1;
cout<<v[x[i]].nu
typedef struct
}
return 0;
me<<" ";
{
}
cout<<endl;
int p;
}
int cont(int k)
}
char
else
{ if(k>1)
void bkt(int p)
nume[20];
k--;
if(x[k]<=x[k-1])
{
}produse;
return 0;
k=1;
produse v[100];
}
return 1;
init(k);
int
int main()
}
while(k>0)
n,k,s,p,x[100];;
{
int solutie(int k)
void citire()
int i;
if(exista (k))
{
{ int i;
citire();
int i,z=0;
cout<<"n=";
for(p=1;p<n;p+
{x[k]=x[k]+1;
if(k==p);
cin>>n;
+)
cout<<"s=";
bkt(p);
if(cont(k))
for(i=1;i<=k;i+
cin>>s;
getche();
+)
for(i=1;i<=n;i+
}
if(solutie(k))
+)
z=z+v[x[i]].p;

14.Produsul cartezian a n multimi.


#include<iostream>
#include<conio.h>
#include<math.h>
using namespace std;
int
n,x[100],k,p,i,j,a[100]
,v[100][100];
void citire()
{cout<<"n=";
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
for(i=1;i<=n;i++)
for(j=1;j<=a[i];j++)
cin>>v[i][j];
}
void init(int k)
{x[k]=0;
}
int exista(int k)
{if(x[k]<a[k])
return 1;
return 0;

}
int solutie(int k)
{if(k==n)
return 1;
return 0;
}
void tiparire(int k)
{int i;
for(i=1;i<=n;i++)
cout<<v[i][x[i]]<<"
";
cout<<endl;
}
void bkt()
{
k=1;
init(k);
while(k>0)
if(exista (k))
{x[k]=x[k]+1;

tiparire(k);
else
{
k=k+1;
init(k);
}
}
else
k--;
}
int main()
{citire();
bkt();
getche();
}

if(solutie(k))

15.Sa se genereze toate cuvintele care se pot forma cu literele a n


cuvinte.

#include<iostream.h
>
#include<conio.h>
#include<math.h>
#include<string.h>
using namespace std;
int
n,x[100],k,p,i,j,a[100]
,v[100][100];
void citire()
{cout<<"n=";
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
for(i=1;i<=n;i++)
for(j=1;j<=a[i];j++)
cin>>v[i][j];

}
void init(int k)
{x[k]=0;
}
int exista(int k)
{if(x[k]<a[k])
return 1;
return 0;
}
int solutie(int k)
{if(k==n)
return 1;
return 0;
}
void tiparire(int k)
{int i;
for(i=1;i<=n;i++)

cout<<v[i][x[i]]<<"
";
cout<<endl;
}
void bkt()
{
k=1;
init(k);
while(k>0)
if(exista (k))
{x[k]=x[k]+1;
if(solutie(k))
tiparire(k);
else

}
int main()
}
{citire();
k=k+1;
else
bkt();
k--;
getche();
init(k);
}
16.Problema Reginelor: Sa se genereze toate modalitatile de
asezare a n regine pe o tabla de n x n,astfel incat reginele sa nu se
atace(2 regine se ataca daca sunt pe aceeasi
linie,diagonala,coloana).
{

#include<iostream>
#include<conio.h>
#include<math.h>
using namespace std;
int n,x[100],k,p;
void citire()
{cout<<"n=";
cin>>n;
}
void init(int k)
{x[k]=0;
}
int exista(int k)
{if(x[k]<n)
return 1;
return 0;
}
int cont(int k)
{int i;
for(i=1;i<k;i++)
if(x[i]==x[k])
return 0;
for(i=1;i<=k;i++)
if((abs(ik)==abs(x[i]-x[k])))
return 0;

return 1;
}
int solutie(int k)
{if(k==n)
return 1;
return 0;
}
void tiparire(int k)
{int i,j;
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
if(x[i]==j)
cout<<"D";
else
cout<<"*";
cout<<endl;
}
cout<<endl;
}
void bkt()
{
k=1;
init(k);
while(k>0)
if(exista (k))

if(cont(k))
if(solutie(k))
tiparire(k);
else
{
k=k+1;
init(k);
}
}
else
k--;
}
int main()
{citire();
bkt();
return 0;
}

{x[k]=x[k]+1;
17.Problema turelor: Sa se afiseze toate ,modalitatile de a aseza n
ture astfel incat turele sa nu se atace.Doua ture se ataca reciproc
daca sunt situate pe aceeasi linie sau coloana.
#include<iostr
int
int exista(int
{for(i=1;i<=k;
eam.h>
n,x[100],i,k,p;
k)
i++)
#include<coni
void citire()
{if (x[k]<n)
if(x[k]==x[i])
o.h>
{cin>>n;}
return 1;
return 0;
#include<mat
void init(int k)
return 0;}
return 1;
h.h>
{x[k]=0;}
int cont(int k)
}

int solutie (int


k)
{if(k==n)
return 1;
return 0;}
void
tiparire(int k)
{for(i=1;i<=n;
i++)

{for(j=1;j<=n;
j++)
if(x[i]==j)
cout<<"T";
else
cout<<"*";
cout<<endl;}
cout<<endl;}
void bkt()

{k=1;
init(k);
while(k>0)
if (exista(k))
{x[k]=x[k]+1;
if (cont(k))
if(solutie(k))
tiparire(k);
else

{k++;
init(k);}}
else
k--;}
int main()
{citire();
bkt();
getche();}

18. Se citeste de la tastatura t(nr.de cladiri>20).O cladire este o

prisma patrulatera regulata.Arhitectul alege S >=4 culori de vopsea


pt.exteriorul cladirii si isi propune sa vopseasca fata
laterala,utilizand culori diferite,dar fatada principala 2 ABA1B1
trebuie sa aiba aceeasi culoare c inclusa in S culori alese.Sa se
genereze toate posibilitatile de generare a unei cladiri cu cele S
culori.
#include<iostream.h>
#include<conio.h>
int n,j,k,i,x[100],a[100],z;
char s[100],c;
void citire()
{int b;
cout<<"t=";cin>>n;
cin>>b;
for(i=1;i<=b;i++)
cout<<"culoarea"<<i<<"=";cin>>
s[i];
n=strlen(s)-1;
cout<<"c=";cin>>c;
}
void init(int k)
{x[k]=0;
}
int exista(int k)
{if(x[k]<n)
return 1;
return 0;
}
int cont(int k)
{int i;
for(i=1;i<=n;i++)
if(x[i]==x[k])
return 0;
return 1;}
int solutie(int k)

{if(k<=n)
return 1;
return 0;}
void tiparire(int k)
{s[2]=c;
for(i=1;i<=k;i++)
cout<<s[x[i]-1];
cout<<endl;
}
void bkt()
{ k=1;
init(k);
while(k>0)
{
if(exista(k))
{
x[k]=x[k]+1;
if(cont(k))
if(solutie(k))
tiparire(k);
else
{k=k+1;
init(k);}
}}}
int main()
{citire();
bkt();
getche();

You might also like