Sunteți pe pagina 1din 3

Domino – Metoda Backtracking

Se considera n piese de domino citite ca perechi de numere naturale, fiecare pe cate un rand de
intrare. Se citeste apoi un numar natural a.

Sa se afiseze toate solutiile de aranjare a acestor piese intr-un lant domino de lungime a, fara a
roti piesele.

(Un lant domino se alcatuieste din piese domino astfel incat o piesa este urmata de alta a carei prima
jumatate coincide cu jumatatea a doua a piesei curente.)

Ex: 1,2 2,6 6,8

date.in:

12

13

34

23

35

45

date.out:

122334

122335

133445

233445
Codul problemei
#include <fstream>
using namespace std; void back(int k)
ifstream fin("date.in"); {
ofstream fout("date.out"); int i;
struct piesa {int a,b;}; for(i=1;i<=n;i++)
int p[100], x[100],n,a; if(!p[i])
piesa d[100]; {
x[k]=i; p[i]=1;
void citire() if(k==1 || d[x[k-
{ 1]].b==d[x[k]].a) if(k==a) afis();
int i; else
fin>>n; back(k+1);
for(i=1;i<=n;i++) p[i]=0;
fin>>d[i].a>>d[i].b; }
fin>>a; }
}
int main()
void afis() {
{ citire();
int i; back(1);
for(i=1;i<=a;i++) fin.close();
fout<<d[x[i]].a<<" "<<d[x[i]].b<<" fout.close();
"; return 0;
fout<<endl; }
}
Explicație

După citirea celor n piese de domino, se parcurge vectorul format din


aceste piese și pentru fiecare piesă în parte se verifică dacă poate fi adăugat în
lanțul de lungime a ( fie daca fie lanțul este gol, fie primul numărul al piesei este
același ca al doilea număr al ultimului domino din lanț). În momentul în care se
formează un lanț de lungime a, acesta se afișează, iar apoi, pe baza unei stive, se
scoate câte o piesă și se adaugă umrătoarea piesă disponibilă, generându-se astfel
toate lanțurile posibile, în ordine screscătoare.

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