online: 5; azi: 305; total: 50760 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 drapelele cu trei culori care se pot forma cu şase culori: alb, gal ben, roşu , verde, albastru şi negru, care au în mijloc culoarea alb, verde sau roşu . Indicație. Soluţia are 3 elemente, un element al soluţiei fiind indicele din vector al unei culori. Se generează aranjamente cu condiţie de 6 obiecte luate câte 3 — soluția conţine o condiție internă suplimentară față de cea impusă de aranjamente: elementul 2 al soluției trebuie să fie indicele culorii alb, verde sau roşu .
# include < iostream >
using namespace std ;
string culori[ 6 ] = { "alb" , "galben" , " rosu " , "verde" , "albastru" , "negru" };
int aranjament[ 3 ];
bool utilizat[ 6 ];
bool valid ( int k) {
if (k == 1 ) {
return aranjament[k] == 0 || aranjament[k] == 3 || aranjament[k] == 2 ;
}
return true ;
}
void tipar () {
for ( int i = 0 ; i < 3 ; i++) {
cout << culori[aranjament[i]] << ' ' ;
}
cout << endl ;
}
void bt ( int k) {
if (k == 3 ) {
tipar ();
return ;
}
for ( int i = 0 ; i < 6 ; i++) {
if (!utilizat[i]) {
aranjament[k] = i;
utilizat[i] = true ;
if ( valid (k)) {
bt (k + 1 );
}
utilizat[i] = false ;
}
}
}
int main () {
bt ( 0 );
return 0 ;
}

Acest program folosește o funcție de backtracking ( bt () ) pentru a construi toate drapelele cu trei culori care se pot forma cu șase culori: alb, galben, roșu, verde, albastru și negru, care au în mijloc culoarea alb, verde sau roșu. Funcția valid() verifică dacă elementul de pe poziția 1 al aranjamentului este una dintre culorile permise (alb, verde sau roșu). Dacă aranjamentul este valid, funcția tipar() afișează drapelele generate.