Upload
kai-walsh
View
70
Download
2
Embed Size (px)
DESCRIPTION
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 - PowerPoint PPT Presentation
Citation preview
Proiect informatica
Ce stim despre metoda backtracking
Aranjamente
PermutariSubmultimi
CombinariPartitii
Produs Cartezian
Metoda backtracking se foloseste in rezolvarea problemelor care
indeplinesc urmatoarele conditii:
Solutia lor poate fi pusa
sub forma unui vector
Valorile vectorului fac parte din
multimi finite ale caror elemente se afla intr-o ordine
bine stabilitaNu se dispune de o alta metoda de rezolvare mai
rapida.
Aplicatii ale metodei backtracking
Ce vrem sa stim
•Sa stim sa lucram mai bine in echipa
• Sa ne consolidam cunostintele despre Backtracking
•
Un spion primeste misiunea de a fura gogosile comandantului unei baze inamice, o misiune strict secreta. Acestea se afla intr-o camera. Pentru a ajunge acolo, spionul nostru trebuie sa se fereasca de paznici, ale caror pozitii au fost descoperite prin satelit. Omul nostru nu poate sa treaca de doua ori prin acelasi loc deoarece acesta lasa urme. El trebuie sa gaseasca cel mai sigur drum pentru a fura gogosile si a se intoarce in siguranta.
Adu-mi gogosile acum, ai inteles?
Da, sa traiti!
Prezentarea tehnicii
Am notat cu t baza militara şi cu st stiva (st[k][0], st[k][1] reprezintă coordonatele spionului la 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 şi plasarea lui pe locuri neatinse.void back(int k,int lin,int col){… if(linie<=n&&linie>=1&&coloana<=n&&coloana>=1&&t[linie][coloana]==0) …}Soluţia este gasită în momentul în care spionul ajunge în punctul de unde a plecat, de coordonate xc, yc.int solutie(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");int dx[]={-2,-1,1,2,2,1,-1,-2};int dy[]={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;int solutie(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(int k,int lin,int col){ int i,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
Click Pentru fisier
Bibliografie:
Manual de informatica (profil real) clasa a XI-a –Vlad Huţanu şi Tudor Sorin, editura L&S Soft 2006Google
Va multumim!
Bogdan Heimerl Petre Danci Ciprian Vasile