Se dau n cuburi numerotate 1,2,...,n, de laturi l şi culori c, i=1,2,...,n (fiecare culoare este codificată printr-un caracter).
Să se tipărească toate turnurile care se pot forma luând k cuburi din cele n disponibile, astfel încat laturile cuburilor din turn să fie în ordine crescătoare iar culorile a oricare 2 cuburi alăturate din turn să fie diferite.
Exemplu: n=4,p=3, considerăm cuburile 1,2,3,4 de laturi (8,4,9,6) şi culori ('r','v','g','v'). Turnurile de cate 3 cuburi care îndeplinesc cerințele din enunț sunt [2,1,3], [4,1,3].
#include
void initializare ()
{for(i=1;i<=25;i++)
st[i]=0;
cin>>n;
for(i=1;i<=n;i++)
{cin>>l[i];
cin>> c[i]; } }
void tiparire (int p)
{int i;
for(i=1;i<=p;i++)
cout< int validare (int p) {for(i=1;i<=p-1;i++) if( l[st[p]]<=l[st[i]]) return 0; if (p>1 && c[st[p]]==c[st[p-1]]) return 0; return 1;} void back (int p) {int val; for( val=1; val<=n; val++) {st[p]=val; if (validare(p)) if(p==k) tiparire(p); else back(p+1);}} int main () {cin>>k; initializare (); back (1); return 0; }