Search This Blog

Wednesday, April 18, 2012

C++: Rotirea unei matrice cu 90°

Astazi va voi arata un algoritm foarte practic, dar ceva mai avansat si intr-o anumita masura mai interesant decat cele pe care vi le-am prezentat pana acum. Acesta consta in rotirea unei matrice patratice cu 90° in sensul acelor de ceasornic. Aceasta rotire a matricei necesita o matrice auxiliara in care o vom roti pe cea initiala, deoarece nu putem folosi o variabila ajutatoare. O alta varianta ar fi un vector auxiliar, dar astfel algoritmul se complica. Iata mai jos algoritmul de rotire cu 90° in sensul acelor de ceasornic sau spre dreapta a matricei "a" in matricea auxiliara "b":

            for(i=1; i<=n; i++)
                    for(j=1; j<=n; j++)
                           b[i][j]=a[n-j+1][i];


Foarte simplu de retinut, nu-i asa? Dar care este explicatia? Imaginile de mai jos reprezinta matricea initiala "a" si matricea in care aceasta a fost rotita, adica "b", iar cu ajutorul lor vei vedea exact unde "va ajunge" fiecare element dupa efectuarea algoritmului de rotire.