online: 21; azi: 34; total: 50489 Manual clasa a xi a - Tehnici de programare - Metoda backtraking

Probleme Rezolvate



Manual clasa a Xi a

Tehnici de programare

Metoda backtraking

Să se genereze toate anagramele unui cuvânt, din care se elimină p litere oarecare. Valoarea minimă a numărului p este 1, iar valoarea maximă este cu 1 mai mică decât lungimea cuvântului. Se citesc de la tastatură cuvântul şi valoarea numărului p.
# include < iostream >
# include < cstring >
using namespace std ;
char cuvant [ 100 ];
int n;
int p;
char anagram [ 100 ];
int viz [ 100 ];
void tipar () {
for ( int i = 0 ; i < n; i++) {
if ( viz [i] == 1 ) {
cout << cuvant [i];
}
}
cout << endl ;
}
void bt ( int k, int elim ) {
if ( elim > p) {
return ;
}
if (k == n) {
tipar ();
return ;
}
// Include litera curentă în anagramă
viz [k] = 1 ;
bt (k + 1 , elim );
// Exclude litera curentă din anagramă
viz [k] = 0 ;
bt (k + 1 , elim + 1 );
}
int main () {
cout << " Introduceti cuvantul : " ;
cin >> cuvant ;
n = strlen ( cuvant );
cout << " Introduceti numarul de litere eliminate (1 <= p <= " << n - 1 << "): " ;
cin >> p;
bt ( 0 , 0 );
return 0 ;
}

Această versiune a codului elimină funcțiile init () , succesor() , valid() și solutie () și modifică funcția bt () . Acum, în loc să folosească o abordare bazată pe succesor și validare, funcția bt () generează direct toate combinațiile de litere ale cuvântului și elimină un număr p de litere specificat de utilizator.