Sunteți pe pagina 1din 3

Info-lab, cl. a XI-a FLA-BKTR1 METODA BACKTRACKING Data: 03-11.10.

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--;
}
}
}

NUME PRENUME 1 Clasa: 11B


FLA-BKTR1
//Permutari recursiv
#include <iostream>
using namespace std;
int n,i;
typedef int stiva[100];
stiva st;
void init(int k);
int succesor(int k);
int valid(int k);
int solutie(int k);
void tipar();
void bktr_rec(int k);
int main()
{ cout<<"n(n>0) = "; cin>>n;
cout<<"Permutarile multimii {1,2,...,"<<n<<"} :\n";
bktr_rec(1);
return 0;
}
void init(int k) //Rulare:
{ st[k]=0; }
int succesor(int k)
{ if(st[k]<n)
{ st[k]=st[k]+1;
return 1;
}
else return 0;
}
int valid(int k)
{ for(i=1;i<k;i++)
if(st[k]==st[i])
return 0;
return 1;
}
int solutie(int k)
{ return k==n; }
void tipar()
{ for(i=1;i<=n;i++)
cout<<st[i]<<" ";
cout<<endl;
}
void bt(int k)
{ init(k);
while(succesor(k))
{ if(valid(k))
{ if(solutie(k))
tipar();
else bktr_rec(k+1);
}
}
}

NUME PRENUME 2 Clasa: 11B


FLA-BKTR1
P2/pag.17 Generarea tuturor elementelor produsului cartezian A1 x A2 x ...x An, unde A1 = {1,2,3, ..., n}, n variant iterativ i
recursiv.
#include
{//program (copiat din mediul Code::Blocks)}
Rulare:
Inserai imaginea cu rezultatul rulrii, prelucrat n Paint

...

NUME PRENUME 3 Clasa: 11B

S-ar putea să vă placă și