Sunteți pe pagina 1din 2

- 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;
}

S-ar putea să vă placă și