Backtracking


 * Variante bac informatica intensiv 2009:** http://oreledeinfo.wikispaces.com/BAC

A.Probleme sol. dimensiune fixa

1. n copii sunt insirati pe n scaune. Copiii sunt numerotati:1,2,3...n. Afisati toate posibilitatile de rearanjare a acestora astfel incat 2 copii sa nu stea alaturi daca au stat in aranjarea initiala. Afisati numarul de solutii.

Obs. Daca n=5, ordinea initiala a copiilor este 1,2,3,4,5. O solutie este 1,3,5,2,4.

2.Sa se genereze toate numerele de k cifre, k<=5, cu toate cifrele pare a) cu toate cifrele distincte b) cu cifre nu neaparat distincte c) prima cifra egala cu ultima iar restul distincte Afisati numarul de solutii pentru fiecare caz in parte.

Ex: a) k=3 204,206...864 b) k=3 200,202, 888 c) k=4 2042, 2062,....8648

3. Din cele n momente artistice pregatite pentru un festival, organizatorii trebuie sa aleaga k. Momentele se numeroteaza cu 1,2,...n. Momentele individuale sunt codificate prin numere pare iar cele impare sunt momente de grup. Ajutati organizatorii sa organizeze festivalul stiind ca trebuie respectate simultan urmatoarele conditii: <span style="font-family: Arial,Helvetica,sans-serif;">a)sa nu fie 2 momente individuale succesive <span style="font-family: Arial,Helvetica,sans-serif;">b)sa nu fie 3 momente de grup succesive. <span style="font-family: Arial,Helvetica,sans-serif;">Afisati numarul de solutii.

<span style="font-family: Arial,Helvetica,sans-serif;">4.Sa se scrie un algoritm de tip backtracking care genereaza in ordine lexicografica toate sirurile de 5 cifre 0 si 1 cu proprietatea ca nu exista mai mult de doua cifre 0 pe pozitii consecutive.

<span style="font-family: Arial,Helvetica,sans-serif;">5. Se citeste un numar natural n. <span style="font-family: Arial,Helvetica,sans-serif;">a)in cazul in care nu are toate cifrele distincte, eliminati cifre pana va indeplini aceasta conditie. <span style="font-family: Arial,Helvetica,sans-serif;">b)formati din cifrele lui n toate numerele posibile. Cate solutii are problema? <span style="font-family: Arial,Helvetica,sans-serif;">Retineti cel mai mare numar format.

<span style="font-family: Arial,Helvetica,sans-serif;">6..Sa se aranjeze n margele de m culori astfel incat oricare doua margele alaturate sa aiba culori diferite. Culorile sunt codificate cu numerele 1,2,...m

<span style="font-family: Arial,Helvetica,sans-serif;">7. Generati toate numerele de n cifre astfel incat: <span style="font-family: Arial,Helvetica,sans-serif;">8. Generati toate numerele de n cifre astfel incat:
 * <span style="font-family: Arial,Helvetica,sans-serif;"> diferenta dintre oricare doua cifre vecine sa fie 2 sau3
 * <span style="font-family: Arial,Helvetica,sans-serif;"> prima si ultima cifra sa aiba aceeasi paritate
 * <span style="font-family: Arial,Helvetica,sans-serif;">prima si ultima cifra sa aiba paritati diferite
 * <span style="font-family: Arial,Helvetica,sans-serif;">dupa o cifra para sa urmeze una mai mare ca aceasta, de orice paritate.

<span style="font-family: Arial,Helvetica,sans-serif;">9. Din cei n copii ai unei clase, k castiga un bilet gratuit la film. Cei k vor fi insirati pe un rand in sala de cinema. <span style="font-family: Arial,Helvetica,sans-serif;">Afisati toate posibilitatile de aranjare.

<span style="font-family: Arial,Helvetica,sans-serif;">10. Generati toate numerele de n cifre astfel incat:

<span style="font-family: Arial,Helvetica,sans-serif;">11.O persoana a uitat numarul de telefon al unui prieten. Stie doar ca numarul are 6 cifre, incepe cu 4 si contine 3 zerouri dintre care doua sunt alaturate. fisati toate variantele pe care trebuie sa le incerce pentru a vorbi cu prietenul sau.
 * <span style="font-family: Arial,Helvetica,sans-serif;">doua cifre alaturate sa nu fie de aceeasi paritate
 * <span style="font-family: Arial,Helvetica,sans-serif;">dupa o cifra para sa urmeze una mai mica decat aceasta, de orice paritate.

<span style="font-family: Arial,Helvetica,sans-serif;">12.Generati toate numerele de n cifre astfel incat sa fie verificate simultan urmatoarele proprietati:


 * <span style="font-family: Arial,Helvetica,sans-serif;">suma dintre oricare doua cifre vecine sa fie 6 sau 7
 * <span style="font-family: Arial,Helvetica,sans-serif;"> prima si ultima cifra sa fie egale
 * <span style="font-family: Arial,Helvetica,sans-serif;">trei cifre alaturate sa nu aiba aceeasi paritate.
 * <span style="font-family: Arial,Helvetica,sans-serif;">primele 3 cifre sa fie distincte

<span style="color: #392be0; font-family: Arial,Helvetica,sans-serif;">B. Probleme "celebre" care se rezolva cu metoda BK <span style="font-family: Arial,Helvetica,sans-serif;">1. La Masa Rotunda sunt n cavaleri. Fiecare dintre ei are cel putin un dusman printre ceilalti. Sa se gaseasca toate posibilitatile de a-i aseza la masa astfel incat doi cavaleri dusmani sa nu fie vecini. Se citesc n,m si m perechi de dusmani din fisier. <span style="font-family: Arial,Helvetica,sans-serif;">2. Problema celor 8 regine <span style="font-family: Arial,Helvetica,sans-serif;">3. Problema rucsacului <span style="font-family: Arial,Helvetica,sans-serif;">4. Problema colorarii hartilor

<span style="color: #4218ed; font-family: Arial,Helvetica,sans-serif;">C. Probleme in care intervin alte multimi <span style="font-family: Arial,Helvetica,sans-serif;">1. Se citesc 3 numere: a, n,k si n numere pozitive distincte. Să se scrie toate submulţimile cu k elemente din şirul dat astfel încât suma lor să fie egală cu a. Dacă nu există o astfel de descompunere să se afişeze mesajul: "Nu există". <span style="font-family: Arial,Helvetica,sans-serif;">Exemplu: a = 10 şi n = 5 iar numerele din şir sunt: 15 2 7 8 3 <span style="font-family: Arial,Helvetica,sans-serif;">Se va afişa: <span style="font-family: Arial,Helvetica,sans-serif;">10 = 2 + 8 <span style="font-family: Arial,Helvetica,sans-serif;">10 = 7 + 3 <span style="font-family: Arial,Helvetica,sans-serif;">2. N copii au inaltimi diferite citite in cm. K formeaza o echipa si se cere sa se gaseasca echipe astfel incat insirati copii sa nu aiba intre oricare doi vecini diferenta de inaltime mai mare decat 10 cm.

<span style="font-family: Arial,Helvetica,sans-serif;">3.Utilizand metoda backtracking

<span style="font-family: Arial,Helvetica,sans-serif;">a) sa se genereze in ordine lexicografica cuvintele de cate n litere din multimea A={a,b,c,d,e,f,g,h}, cuvinte care nu contin doua vocale alaturate. <span style="font-family: Arial,Helvetica,sans-serif;">b) Sa se genereze toate cuvintele cu k litere distincte care incep cu o vocala si se termina cu o consoana.

<span style="font-family: Arial,Helvetica,sans-serif;">4. n copii sunt pregatiti pentru ora de sport. Pentru fiecare se cunoaste inaltimea, in cm. Toate inaltimile sunt diferite. Ei doresc sa se joace un joc. Trebuie alesi doar k si insirati pe un rand, astfel incat diferenta de inaltime dintre doi copii alaturati sa nu depaseasca valoarea 10.

<span style="font-family: Arial,Helvetica,sans-serif;">Afisati numarul de solutii ale problemei. Daca nu sunt solutii, afisati cuvantul IMPOSIBIL.

<span style="font-family: Arial,Helvetica,sans-serif;">Ex: Daca n=5, k=3, inaltimile sunt 170, 165, 189, 181, 172

<span style="font-family: Arial,Helvetica,sans-serif;">O solutie: 170 165 172

<span style="font-family: Arial,Helvetica,sans-serif;">5.Gigel are n cartonase (n<10). Pe fiecare este scrisa o cifra de la 1 la 9. Utilizand doua tipuri de cartonase cu + si - vrea sa obtina rezultatul 2. Care sunt solutiile pentru n citit?

<span style="font-family: Arial,Helvetica,sans-serif;">6.Fiind data o multime de n cuburi, fiecare cub fiind caracterizat de lungimea laturii si culoarea sa, sa se scrie un program care sa genereze toate turnurile care se pot forma cu p cuburi astfel incat doua cuburi vecine sa nu aiba aceeasi culoare iar deasupra unui cub sa nu se poata aseza un cub cu latura mai mare.

<span style="font-family: Arial,Helvetica,sans-serif;">7. Un grup de copii are la dispozitie n cartonase cu n cuvinte disticte pentru jocul "cerc de cuvinte". In acest joc un copil trebuie sa spuna un cuvant care sa aiba primele doua litere identice cu ultimele doua ale cuvantului spus de predecesorul lui. fiind dat un cuvant de inceput pentru joc, afisati toate variantele cu k cuvinte care se pot obtine cu ajutorul cartonaselor date. Observatie: un sir de cuvinte nu va contine un cuvant de mai multe ori.

<span style="font-family: Arial,Helvetica,sans-serif;">Ex: n=8 k=4 vlad, administreaza, vase,ceva,aduce,dariei,zapada,daaa

<span style="font-family: Arial,Helvetica,sans-serif;">vlad aduce ceva vase vlad administreaza zapada dariei

<span style="font-family: Arial,Helvetica,sans-serif;">8. Afisati toate anagramele unui cuvant dat.

<span style="font-family: Arial,Helvetica,sans-serif;">9. Afisati toate cuvintele care se pot forma cu literele dintr-un cuvant citit astfel incat sa nu fie mai mult de doua consoane consecutive.

<span style="font-family: Arial,Helvetica,sans-serif;">10. Generati toate cuvintele de k litere folosind litere ale unui cuvant dat astfel incat cuvantul sa inceapa cu o vocala si sa nu aiba mai mult de doua vocale sau doua consoane consecutive.

<span style="font-family: Arial,Helvetica,sans-serif;">11. Afisati in ordine lexicografica cuvintele de n litere astfel incat 2 litere alaturate dintr-o solutie sa fie alaturate si in alfabet: <span style="font-family: Arial,Helvetica,sans-serif;"> ex: n=4 abab,abcb, abcd,baba,babc,bcba...

<span style="font-family: Arial,Helvetica,sans-serif;">12.Afisati toate cuvintele de k litere distincte din multimea literelor unui cuvant citit de la tastatura. (literele care se repeta in cuvant se vor elimina)

<span style="font-family: Arial,Helvetica,sans-serif;">13. Se considera n piese de domino citite din fisierul domino.in ca perechi de numere naturale, fiecare pereche pe o linie. Se citeste apoi un numar natural k. Sa se afiseze toate solutiile de aranjare a acestor piese intr-un lant de domino de lungime k, fara a roti piesele.

Ex n=5 k=3 1 3 4 5 3 6 6 4 9 1 Una din solutii e 1-3 3-6 6-4 14. Pe n scaune sunt aranjate n persoane intr-o ordine precizata. Sa se rearanjeze in toate modurile cele n persoane pe cele n scaune tinand cont de urmatoarele doua conditii: - doua persoane alaturate trebuie sa nu fi fost alaturate in aranjarea initiala - fiecare persoana trebuie sa stea pe un scaun diferit de cel pe care a stat initial

15. Se citeste un numar natural n. Afisati permutarile multimii 1,2,3…n in care pana la jumatate elementele sunt in ordine descrescatoare, iar de la jumatate pana la final in ordine crescatoare.

16. Se citeste un cuvant de la tastatura. a) Sa se elimine litere din acesta pana cand toate sunt distincte. b) Sa se genereze toate cuvintele cu k litere din cuvantul obtinut astfel incat: - consoanele sa fie distincte (sa nu se repete) - fiecare vocala din cuvantul initial sa apara cel putin o data intr-o solutie Ex: k=7 aaavvvviiioooaanne -> avione Exemple solutii: vnaeioo, vaeiooo

17. Se citeste un cuvant de la tastatura. Formati toate cuvintele cu literele distincte ale cuvantului alaturat, astfel incat sa nu existe 2 vocale sau doua consoane alaturate. EX. pentru cuvantul MARIA, se obtin din literele M,A,R,I cuvintele: MARI, MAIR, etc

18. Sa se formeze toate sirurile de n litere, formate doar din literele A si M, fara sa existe doua litere A alaturate.

19. Sa se formeze toate melodiile din n note muzicale astfel incat: nota DO sa nu apara langa nota RE nota SI sa fie urmata imediat de nota MI (deci SI sa nu fie ultima) in cadrul melodiei, inaintea notei SOL sa existe 2 note DO ( DO,RE,Mi,FA,SOL,LA,SI - se cunosc)

20.Se dau n persoane numerotate 1,2,3,...n si p relatii de forma i - j, unde i este fiul lui j. Sa se aranjeze cele n persoane intr-un rand astfel incat fiecare persoana sa stea inaintea fiilor ei.

21.Se citeste de la tastatura un numar natural n. a) daca numarul nu are cifrele distincte, sa se elimine cifrele care se repeta. Sa se afiseze noul numar ( N ). b) sa se formeze toate numerele posibile din cifrele numarului dat, astfel incat doua cifre alaturate sa nu fi fost alaturate in numarul N. Cate solutii are problema?

22. Sa se reconstituie adunarea SEND + MORE=

MONEY

SEND + NEED =

MONEY

23. Se citesc n cuvinte. Sa se formeze toate sirurile de k cuvinte, astfel incat prima si ultima litera a unui cuvant sa se regaseasca printre literele cuvantului urmator.

24. Elevii unei clase au într-o zi din săptămână n discipline diferite, ce se citesc din fisier. Afișati toate posibilitățile de a face orarul zilei respective.


 * D. Probleme cu solutii de dimensiune variabila **

1. Partitiile unui numar 2. Submultimile unei multimi.

3. Sa se descompuna un numar n in suma de termeni distincti impari. Ex: 25 = 1 + 3 + 5+ 7+9 25 = 1+ 3 +21 25 = 1+ 5 + 19 ...

4. Se citesc dintr-un fisier un numar n si o multime cu n elemente. Afisati toate submultimile acesteia.

5. Se citesc dintr-un fisier un numar n, o multime cu n elemente si o valoare S. Afisati toate submultimile multimii date care au suma elementelor egala cu S.

6. Se da o scara cu n trepte. Stiind ca un om poate sa urce cel mult 3 trepte odata, sa se afiseze toate posibilitatile de a urca scara. Ex: n = 5 11111,1112,1121,113...32

7. Pentru elaborarea unui test de aptitudini se dispune de un set de n intrebari, fiecare intrebare avand un anumit punctaj. Sa se elaboreze toate chestionarele avand intre a si b intrebari si totalizand intre c si d puncte.

8. Sa se genereze toate modalitatile de plata a unei sume S de bani, avand la dispozitie oricate monezi din fiecare valoare. numarul tipurilor de monezi, valorile acestor monezi precum si suma S se citesc de la tastatura.

Ex: pentru monezi de 1,3,5,10 si suma S=20

20 = 1 * 20 20 = 1 * 2 + 3 * 6 etc

9. In conditiile problemei 8, determinati o solutie cu numar minim de monezi.

10. Problema discreta a rucsacului Se da o multime formata din N obiecte, fiecare fiind caracterizat de o greutate si un profit. Sa se gaseasca o submultime de obiecte astfel incat suma profiturilor lor sa fie maxima, iar suma greutatilor lor sa nu depaseasca o valoare G

11. Se citeste un numar natural n<30. Sa se afiseze toate modalitatile de a-l calcula prin adunari sau scaderi ale numerelor 1,2, ...n. Fiecare numar de la 1 la n va aparea o singura data în descompunerea lui n. Daca acest lucru nu este posibil, se va afisa mesajul „Imposibil”. Exemplu:

5=1-2-3+4+5 5=-1+2+3-4+5

12. Se citeste un numar natural n. Sa se afiseze toate modalitatile de a-l descompune ca suma de numere naturale consecutive. Daca acest lucru nu este posibil, se va afisa mesajul „Imposibil”. Exemplu: Numarul 15 se poate scrie ca urmatoarele sume: 1+2+3+4+5, 4+5+6 sau 7+8. Numarul 8 nu poate fi scris ca suma de numere consecutive.

13. Sa se descompuna un numar n in suma de termeni distincti. a) Afisati toate descompunerile b) Afisati descompunerea cu numar maxim de termeni. Daca exista mai multe, afisati una singura.

14. Se da o multime cu n elemente numere naturale. a) Sa se afiseze toate submultimile acesteia care au suma elementelor egala cu un S dat. b) Dintre solutiile de la a) afisati o submultime care are numar maxim de elemente impare

15. Se da o multime cu n elemente numere naturale. a) Sa se afiseze toate submultimile acesteia care au suma elementelor egala cu un S dat si contin cel putin k elemente b) Dintre solutiile de la a) afisati o submultime care are numar maxim de element

16. Se citesc dintr-un fisier un numar n reprezentand numarul de intrebari dintr-o baza de date si punctajul aferent fiecarei intrebari. Trebuie selectate minim a intrebari si maxim b intrebari astfel incat punctajul total sa fie cel putin s. Afisati toate posibilitatile de selectare a acestora.

de exemplu:

n=8 intrebari cu punctajele 2,5,7,1,3,3,5,6 (coresp. intrebarii 1, intrebarii 2, etc) a=4 b=6 s = 10 o solutie ar fi selectarea intrebarilor 1,2,3,4 pt care se obtin 15 puncte

17. Afisati toate submultimile cu m elemente ale unei multimi cu n elemente, care verifica: a) exista cel putin P pare si cel putin I impare b) produsul elementelor este cel putin egal cu P dat

18. Afisati toate numerele cu cifre impare distincte astfel incat suma cifrelor sa fie un numar cuprins intre p si q.

19. Afisati toate modalitatile de a descompune un numar n in suma de numere prime (ordon. strict crescator)