130 likes | 253 Views
BACKTRACKING. CE ESTE BACKTRACKINGUL ?. ESTE O METODA DE GENERARE A MAI MULTOR SOLUTII FORMATA DINTR-O SUCCESIUNE DE SUBPROGRAME CU SARCINA DE A USURA MUNCA PROGRAMATORULUI. UN ELEV ESTE NEHOTARAT IN PRIVINTA ALEGERII ORDINII LICEELOR PENTRU FISA DE INSCRIERE.
E N D
CE ESTE BACKTRACKINGUL ? ESTE O METODA DE GENERARE A MAI MULTOR SOLUTII FORMATA DINTR-O SUCCESIUNE DE SUBPROGRAME CU SARCINA DE A USURA MUNCA PROGRAMATORULUI
UN ELEV ESTE NEHOTARAT IN PRIVINTA ALEGERII ORDINII LICEELOR PENTRU FISA DE INSCRIERE PENTRU A LUA O DECIZIE, EL S-A FOLOSIT DE METODA PERMUTARILOR IN CELE DIN URMA ELEVUL A REALIZAT CA SUNT PREA MULTE SOLUTII CA EL SA LE POATA SCRIE SINGUR , ASA CA A FOLOSIT METODA BACKTRACKING PENTRU A GENERA RESTUL POSIBILITATILOR VITEAZU VITEAZU SAVA SAVA ROSETTI ROSETTI COSBUC COSBUC HASDEU HASDEU VIANU VIANU A DOUA SOULTIE PRIMA SOLUTIE
CE VREAU SA STIU ? CUM FUNCTIONEAZA ? CAND POT SA IL FOLOSESC ?
SA AFLAM IMPREUNA VOM INTELEGE MAI BINE CU AJUTORUL UNUI EXEMPLU MAI COMPLEX NE AFLAM IN ANUL 2040 CERCETATORII ROMANI AU CREAT MASINA TIMPULUI SI AU DECIS SA IL TRIMITA PE RADU INAPOI IN TRECUT , DAR DIN NEFERICIRE EL A AJUNS INTR-UN LAC MINAT IN TIMPUL CELUI DE-AL DOILEA RAZBOI MONDIAL.PENTRU A IESI A APELAT LA PRIETENII LUI DIN VIITOR VLAD SI ALEX PENTRU A GASI O CALE DE IESIRE.
1 2 3 4 5 RADU PE CAMPUL MINAT 1 2 3 4 5 1 2 2 5 5 4 4 1 2 2 2 4 4 4 4 2 2 3 2 3 4 3 4 3 IESIRE NORD IESIRE EST IESIRE SUD IESIRE VEST
BIBLOTECILE CODUL SURSA CALE FISIER #include<conio.h> #include<fstream.h> int sol[100][2],l[10][10],m,n,k,i,j,lin,col; ifstream f("C:\\bc5\\bin\\mat.txt"); int vizitat(int k,int lin,int col) { int v=0; for(i=1;i<=k;i++) if(sol[i][0]==lin && sol[i][1]==col)v=1; return v; }
CITIRE NUMAR LINII SI COLOANE main() { f>>m; f>>n; for(i=1;i<=m;i++) for(j=1;j<=n;j++) {f>>l[i][j]; } cout<<"Pozitia lu Radu pe linie = "; cin>>lin; cout<<"Pozitia lui Radu pe coloana = "; cin>>col; for(i=1;i<=m;i++) { for(j=1;j<=n;j++) cout<<l[i][j]<<" "; cout<<endl; } back(k,lin,col); getch(); } CITIRE POZITIE CITIRE POZITIE AFISARE MATRICE APELARE BACK
void tipar(int k,int lin,int col) { cout<<"solutie"<<endl; for(i=1;i<=k-1;i++) cout<<sol[i][0]<<" "<<sol[i][1]<<endl; if(lin==0) cout<<"iesire prin nord"<<endl; else if(lin==m+1) cout<<"iesire prin sud"<<endl; else if(col==0) cout<<"iesire prin vest"<<endl; else cout<<"iesire prin est"<<endl; } AFISARE SOLUTII
COORDONATELE LUI RADU void back(int k,int lin,int col) {if(lin==0 || lin==m+1 || col==0 || col==n+1) tipar(k,lin,col); else {sol[k][0]=lin; sol[k][1]=col; for(int i=1;i<=4;i++) switch(i){ case 1: if(l[lin][col] & 8 && !vizitat(k,lin-1,col)) back(k+1,lin-1,col); break; case 2: if(l[lin][col] & 4 && !vizitat(k,lin,col+1)) back(k+1,lin,col+1); break; case 3: if(l[lin][col] & 2 && !vizitat(k,lin+1,col)) back(k+1,lin+1,col); break; case 4: if(l[lin][col] & 1 && !vizitat(k,lin,col-1)) back(k+1,lin,col-1); break; }}} SE EXECUTA MISCAREA IN MATRICE
CE AM INVATAT ? CAT DE IMPORTANTA POATE FI MUNCA IN ECHIPA CAND SA FOLOSESC BACKTRACKING SA IMI FOLOSESC IMAGINATIA
VLAD RADU ALEX