100 likes | 266 Views
Proiect informatica. Ce s t im despre metoda backtracking. Produs Cartezian. Aranjamente. Permutari. Submultimi. Combinari. Partitii. Valorile vectorului fac parte din multimi finite ale caror elemente se afla intr -o ordine bine stabilita. Aplicatii ale
E N D
Ce stimdespremetoda backtracking • ProdusCartezian • Aranjamente • Permutari • Submultimi • Combinari • Partitii Valorilevectoruluifac parte din multimi finite ale carorelemente se aflaintr-o ordinebinestabilita Aplicatii ale metodei backtracking Solutia lorpoatefipusa sub forma unui vector Metoda backtracking se foloseste in rezolvareaproblemelor care indeplinescurmatoareleconditii: Nu se dispune de o altametoda de rezolvaremairapida.
Cevrem sa stim • Sa stimsalucrammaibine in echipa • Sa ne consolidamcunostinteledespre Backtracking •
Un spionprimestemisiunea de a furagogosilecomandantuluiuneibazeinamice, o misiune strict secreta. Acestea se aflaintr-o camera. Pentru a ajungeacolo, spionulnostrutrebuiesa se fereasca de paznici, ale carorpozitii au fostdescoperiteprinsatelit. Omulnostru nu poatesatreaca de douaoriprinacelasi loc deoareceacestalasaurme. El trebuiesagaseascacelmaisigur drum pentru a furagogosilesi a se intoarce in siguranta. Adu-mi gogosileacum, aiinteles? Da, satraiti!
Prezentareatehnicii Am notat cu t bazamilitaraşi cu st stiva (st[k][0], st[k][1] reprezintă coordonatele spionuluila mutarea cu numărul k, respectiv linia şi coloana ). int t[10][10],st[10][2],i,j,n,xc,yc,xr,yr,k; Condiţiile de continuare sunt date de menţinerea spionului in viata precum şiplasarealuipelocurineatinse. void back(intk,intlin,intcol) {…if(linie<=n&&linie>=1&&coloana<=n&&coloana>=1&&t[linie][coloana]==0) …} Soluţia este gasită în momentul în care spionulajunge în punctul de unde a plecat, de coordonate xc, yc. intsolutie(int k) {… if(k>1&&st[k][0]==xc&&st[k][1]==yc&&ok==1) return 1; …} Coordonatele gogosilor(xr, yr) se regăsesc în stivă. Când se ajunge la o soluţie, se afişează conţinutul stivei unde este memorat traseul spionuluişi se opreşte execuţia programului.
ifstream f("spion .in"); intdx[]={-2,-1,1,2,2,1,-1,-2}; intdy[]={1,2,2,1,-1,-2,-2,-1}; int t[100][100],st[100][2],i,j,n,xc,yc,xr,yr,k,b[100][100],nr; intsolutie(int k) { int ok=0; for(j=1;j<=k;j++) if(st[j][0]==xr&&st[j][1]==yr) ok=1; if(k>1&&st[k][0]==xc&&st[k][1]==yc&&ok==1) return 1; else return 0; } void tipar(int k) { cout<<endl; for(i=1;i<=k-1;i++) { cout<<st[i][0]<<" "<<st[i][1]<<endl; if(st[i][0]==xr&&st[i][1]==yr) b[st[i][0]][st[i][1]]=-i; else b[st[i][0]][st[i][1]]=i; } cout<<endl; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) cout<<setw(3)<<b[i][j]<<' '; cout<<endl; } for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(b[i][j]!=-1) b[i][j]=0; getch(); nr++; if(nr==5) exit(EXIT_SUCCESS); } void back(intk,intlin,intcol) { inti,linie,coloana; if(solutie(k-1))tipar(k); else{ st[k][0]=lin; st[k][1]=col; for(i=0;i<=7;i++) { linie=lin+dx[i]; coloana=col+dy[i]; if(linie<=n&&linie>=1&&coloana<=n&&coloana>=1&&t[linie][coloana]==0) {t[linie][coloana]=1; back(k+1,linie,coloana); t[linie][coloana]=0; }}}} void main() { clrscr();f>>n; for(i=1;i<=n;i++) for(j=1;j<=n;j++) { f>>t[i][j]; if(t[i][j]) b[i][j]=-1; else b[i][j]=0; } f>>xc>>yc; f>>xr>>yr; f.close(); back(1,xc,yc); } >>>>>>>
Click pentru program ClickPentrufisier
Bibliografie: • Manual de informatica(profil real) clasa a XI-a –Vlad Huţanu şi Tudor Sorin, editura L&S Soft 2006 • Google
Vamultumim! BogdanHeimerlPetreDanciCiprianVasile