100 likes | 230 Views
Echipa Neamu & Neamu. Scuze. Metoda backtracking. Ce este aceasta? Backtracking-ul este o metoda folosita in majoritatea limbajurilor de cod, ce implica generarea solutiilor intr-o ordine bine stabilita. Utilizare In cazul in care solutiile sunt sub forma de vector sau
E N D
EchipaNeamu & Neamu Scuze...
Metoda backtracking • Ce este aceasta? Backtracking-ul este o metoda folosita in majoritatea limbajurilor de cod, ce implica generarea solutiilor intr-o ordine bine stabilita. • Utilizare In cazul in care solutiile sunt sub forma de vector sau matrice. Si daca la o anumita problema exista mai multe solutii.
Aplicatii ale metodei intalnim cand dorim sa afisam anumite operatii matemetice cu solutiile sale. Spre exemplu, chestiuni practice ca organizarea unui grup la o masa/incapere sau in echipe mai mici decat cel initial, sau plata unei sume de bani in cat mai multe variante cu valorile detinute. Dar, mai exista si alte situatii in care backtracking-ul este eficient,cum ar fi aranjarea mai multor dame pe o tabla de sah astfel incat sa nu se poata lua, sau chiar si iesirea dintr-un labirint.
La ce ma gandesc? Care ar fi una din rezolvarile la problema calului ce sare pe o tabla de sah.
Enuntul problemei Avand o tabla de sah cu nxn patratele si unul dintre cai pusi in coltul din stanga sus, care sunt mutarile ce trebuiesc facute de aceasta piesa, ca sa treaca o singura data prin fiecare patrat.
Rezolvare • Calul poate face o mutare doar in L, numita si “saritura”. El se poate sari in maxim 8 directii sau minim 2. • Tabla nu prezinta obstacole, mai putin depasirea marginii.
X X X X X X X X X X X X X X X X X X X X X X X X
Scrierea in cod #include<fstream.h> #include<conio.h> #include<stdlib.h> const int x[8]={-1,-1,1,1,-2,-2,2,2}; const int y[8]={-2,2,-2,2,-1,1,-1,1}; int n,st[1000][2],m[25][25]; void back(int k,int lin,int col) {int linie,coloana,i; if(k==n*n) {for(i=1;i<=k-1;i++) cout<<st[i][0]<<"-"<<st[i][1]<<","; cout<<lin<<"-"<<col<<"."; exit(EXIT_SUCCESS); } else {st[k][0]=lin; st[k][1]=col; for(i=0;i<=7;i++) {linie=lin+x[i]; coloana=col+y[i]; if(linie<=n&&linie>=1&&coloana<=n&&coloana>=1&&m[linie][coloana]==0) {m[linie][coloana]=1; back(k+1,linie,coloana); m[linie][coloana]=0; } } } } main() {cin>>n; m[1][1]=1; back(1,1,1); getch(); } Clik aici pentru executabil
Bibliografie: • Pentru poze : www.google.ro • Manual de informatica clasa a X1-a autori Vlad Hutanu si Tudor Sorin Ce am invatat? • Practicalitatea backtracking-ului in rezolvarea unei probleme. • Poate, in caz ca nu se stia, cum se misca un cal pe o tabla de sah.