se pleaca de la primul etaj k=1; din fata usi x[k]=0; atata timp cat ne aflam pe un etaj,k while(k>0) repetam { do { ne intrebam daca mai sunt raioane pe etajul k succ(x,k,as); daca Da atunci if(as) se verifica daca ne convine ce contine raionul valid(x,k,ev); care urmeaza }while(as && !ev); atata timp cat(mai sunt raioane si nu a gasit ce ne place); If(as) daca am gasit atunci If(k==5) daca le-am luat pe toate atunci afis(x,k); se afiseaza Else { altfel k=k+1; se merge la etajul x[k]=0; urmator } Else in fata usi k=k-1; altfel } se coboara la etajul de jos Cum ne dam seama daca mai sunt raioane la etajul k? Void succ(sir x, int k, int &as) Daca numarul raionului de la etajul k este mai mic decat 10 { Atunci If(x[k]<10) { Mai sunt raioane pe etajul k as=1; Si mergem la raionul urmator x[k]=x[k]+1; Altfel } Nu mai sunt raioane pe etajul k Else as=0; } Cum se realizeaza afisarea? Void afis(sir x,int k) Pentru i de la 1 la k { Se afiseaza x[i] Int i; Cursorul se trece la linia urmatoare For(i=1;i<=k;i++) Cout<<x[i]<<” “; Cout<<endl; } Observatie. Presupunem ca orice alegere de haine ne convine. Void valid(int &ev) { ev=1; } 4.3 EXEMPLE DE FUNCTII VALID POSIBILE 1. Nu exista conditii intre componentele vectorului solution Void valid(int &ev) { ev=1; } 2.Componentele vectorului solutie trebuie sa fie distincte. Void valid(sir x,int k, int &ev) Trebuie aratat ca: xk!=xi pentru i=1…k-1. { Se procedeaza astfel: Int i; - se presupune ca xk este diferit de toate elementele din fata sa; ev=1; - se parcurg indici 1…k-1 cu i: for(i=1;i<=k-1;i++) - daca xk nu este != de xi, atunci if(!(x[k]!=x[i])) Presupunerea este falsa. ev=0; } 3.Componentele vectorului solutie trebuie sa fie sortate crescator. Void valid(sir x, int k, int &ev) Trebuie aratat ca: xk>=xk-1 pentru k>=2. { Se procedeaza astfel: ev=1; - se presupune ca propozitia este adevarata; if((k>=2) && !(x[k]<=x[k-1])) - daca k>=2 si xk<xk-1 atunci ev=0; Propozitia este falsa. } 4.Componentele vectorului solutie trebuie sa fie sortate descrescator. Void valid(sir x, int k, int &ev) Trebuie aratat ca: xk<=xk-1 pentru k>=2. { Se procedeaza astfel: ev=1; - se presupne ca propozitia este adevarata; if((k>=2) && !(x[k]<=x[k-1])) - daca k>=2 si xk>xk-1, atunci ev=0; Propozitia este falsa. } 5.Componenta vectorului solutie cu numarul de ordine p trebuie sa Void valid(sir x,int k,int &ev) verifice o conditie. { Trebuie aratat ca: xp verifica o conditie. ev=1; Se procedeaza astfel: if((k==p) && !(x[k] verifica conditia)) - se presupue ca propozitia este adevarata; ev=0; - daca k=p si xk nu verifica conditia, atunci } Propozitia este falsa. Observatie. Daca se lucreaza asupra elementelor multimii A={a1,a2,…am}, se scrie a[x[i]] in loc de x[i] pentru orice i.