Documente Academic
Documente Profesional
Documente Cultură
Pentru fiecare problemă există anumite relații care trebuie satisfăcute între
elemente. Acestea se numesc condiții de validare.
O soluție e finală doar dacă nr de nivele k este egal cu nr. n al valorilor care
alcătuiesc soluția.
Niv 3 k=3 3 1 2 1
3 2
Niv 2 k=2 2 3 1 3 1 2
1 1 2 2 3 3
Niv 1 k=1
Implementarea recursivă a metodei Backtracking
int n, v[20];
//Folosim funcția bktr care completează nivelul k din stivă:
void bktr(int k)
{int i;
for(i=1;i<=n;i++)
{v[k]=i;
if(valid(k))
if(final(k))
afisare(k);
else bktr(k+1);}
}
//functia principala main
int main()
{cin>>n;
bktr(1);
return 0;
}
// verificam conditiile de validitate
int valid(int k)
{int i;
for(i=1;i<=k-1;i++)
if(v[i]==v[k]) return 0;
return 1;
}
// verificam daca am obtinut o solutie finala
int final(int k)
{ if(k==n) return 1;
return 0;
}
// afisam solutia obtinuta
void afisare(int k)
{int i;
for(i=1;i<=k;i++) cout<<v[i]<<” ”;
cout<<endl;
}