Documente Academic
Documente Profesional
Documente Cultură
6 8 9 3
Exemplu: Fie terenul alaturat. Initial, bila se afla pe subterenul de 9 7 6 9
coordonate (2,2). O posibilitate de iesire din teren este data de drumul:
(2,2), (2,3), (3,3), (3,4). In program, altitudinile subterenului vor fi 5 8 5 4
retinute de matricea t.
8 3 7 1
6 8 9 3
9 7 6 9
9 7 6 9
2) Vectorul solutie. 5 8 5 4
O solutie este o succesiune de
subterenuri prin care bila poate
trece pentru a iesi de pe terenul
dat. Reprezentam solutia prin doi
vectori, lin respectiv col. La pasul i, 8 3 7 1
bila se afla in subterenul de
coordonate (lin[i], col[i]). Asadar,
initial lin[0]=l0 si col[0]=c0.
6 8 9 3
3) Multimea valorilor posibile pentru
o componenta a traseului. 0
La pasul k, bila se poate afla in
subterenul de coordonate lin[k] si
col[k], valori calculate in functie de 9 3 7 1 6 9
pozitia anterioara (lin[k-1], col[k-1]) si
directia aleasa (0, 1, 2 sau 3). Fiecare 2
dintre directii presupune o deplasare a
bilei, pe linie sau pe coloana. Valorile
cu care se modifica linia si coloana de 5 8 5 4
deplasare sunt memorate in vectorii
dl[4]={-1,0,1,0} si
dc[4]={0,1,0,-1}.
Deci d { 0, 1, 2, 3} 8 3 7 1
lin[k]=lin[k-1]+dl[d];
col[k]=col[k-1]+dc[d];
4) Validarea datelor
Pentru ca bila sa poata ajunge in subterenul de coordonate (lin[k],
col[k]), trebuie indeplinite conditiile:
-subterenul sa apartina terenului, deci (lin[k]>=0 && col[k]>=0 &&
lin[k]<n && col[k]<m)
-subterenul sa aiba o inaltime mai mica decat precedentul: (h[lin[k]]
[col[k]]<h[lin[k-1]][col[k-1]])
6 8 9 3
9 7 6 9
5) Solutie finala
Se tipareste solutia, atunci cand 5 8 5 4
bila a ajuns pe una dintre marginile
terenului: (lin[k]==0 || lin[k]==n-1 ||
col[k]==0 || col[k]==m-1)
8 3 7 1
6 8 9 3
0
9 3 7 1 6 9
2
5 8 5 4
8 3 7 1
#include <fstream.h>
#include <conio.h>
#include <iomanip.h>
1 2
void Back(int k)
void Tipar(int k) {for (int d=0; d<4; d++)
{ int i, j, aux[20][20]; {lin[k]=lin[k-1]+dl[d];
for(i=0;i<n;i++) col[k]=col[k-1]+dc[d];
for(j=0;j<m;j++) if (Valid(k)){if (Solutie(k))
aux[i][j]=h[i][j]; Tipar(k);
Back(k+1);
for (i=0; i<=k; i++) }
aux[lin[i]][col[i]]=-1; }
}
for(i=0;i<n;i++)
{for(j=0;j<m;j++)
fo<<setw(4)<<aux[i][j];
fo<<endl; void main()
} {Citire();
fo<<endl<<endl; lin[0]=l0; col[0]=c0;
} Back(1);
fo.close();
}
3 4
• Link: date.in
• Link: date.out
• Link: editare program
• Link: rulare executabil
Cativa din neuronii geniilor acestei
echipe au colaborat pentru realizarea a
ceea ce tocmai ati vazut.
Am invatat:
-sa lucram in echipa;
-toate rutele pe care o bila le poate folosi
pentru a iesi de pe un teren denivelat.