- pe o pozitie oarecare nu mai pot ajunge pt ca acolo pun nr de pasi ( iar acesta fiind un nr diferit de 0 va fi
struct poz asociat cu zid ( care e -1, tot diferit de 0)
{ int lin,col; } c[100]; - este coada de structuri- pozitii(lin,col) …………… int dx[]= {0,-1,0,1,0},dy[]= {0,0,1,0,-1}; - vectorii de directive N-1, E-2… cin>>n>>m; for(i=1; i<=n; i++) for(j=1; j<=m; j++) cin>>x[i][j]; - citesc matricea coresp. labirintului (-1=zid, 0=culoar) for(i=1;i<=m;i++) x[0][i]=x[n+1][i]=-1; - bordez cu zid (-1) de jur imprejur, adica pe linia 0 si n+1 si pe coloana for(i=1;i<=n;i++) 0 si m+1 ( ca sa nu verific de fiecare data daca nu cumva am iesit din x[i][0]=x[i][m+1]=-1; matrice
cin>>i_start>>j_start>>i_final>>j_final; - citesc coordonatele de start si de final
c[1].lin= i_start; -adaug pozitia de start in coada
c[1].col= j_start; ultim=prim=1; - ea este si prima (pi) si ultima (ps) x[i_start][ j_start]=1; - markez pozitia de start cu 1 ( adica 1 pas) while(prim<=ultim && x[i_final][ j_final]==0) - cat timp NU AM GOLIT COADA si NU AM AJUNS la destinatie { for(i=1; i<=4; i++) - incerc sa vad pe care din cele 4 directii pot sa o iau { Linie_noua= c[prim].lin + dx[i]; Coloana_noua= c[prim].col + dy[i]; if(x[Linie_noua][ Coloana_noua]==0) - pot sa ajung daca e culoar { ultim ++; - adaug un element in coada( adica creste ultim) c[ultim].lin= Linie_noua; - ultim este pozitia pe care se adauga noul elem in coada c[ultim].col= Coloana_noua; x[Linie_noua][ Coloana_noua]=x[c[prim].lin][c[prim].col]+1; - am mai facut 1 pas }
prim++; - simulez eliminarea prin cresterea indicelui de pozitie)
} } for(i=1;i<=n;i++) - aici se afiseaza toata matricea ( care cuprinde nr de pasi din fiecare pozitie pe { traseul cel mai scurt) for(j=1;j<=m;j++) cout<<x[i][j]<<" "; cout<<"\n"; } cout<<x[i_final][j_final]; - aici se afiseaza nr de pasi pana la pozitia finala return 0; }