Uno dei miei studenti mi ha chiesto questo tipo di compiti con gli array C++. Mi è sembrato piuttosto interessante, quindi, sebbene abbia risolto questo problema, ho voluto condividere la mia soluzione con te e conoscere altre varianti e opinioni. Il problema è il seguente:Ruota un array 2D sul posto senza utilizzare un nuovo array: la migliore soluzione C++?
Problema Viene fornita una matrice quadratica dinamica dinamica (matrice) A (nxn). È necessario ruotare l'array di 90 gradi in senso antiorario, vale a dire dopo che il campo A [1,1] di rotazione deve contenere il valore di A [1, n] e il campo A [1, n] deve contenere il valore di A [n, n]. E inoltre è necessario che mentre si risolve questo problema non si debba usare nessun altro array.
La mia soluzione Ho detto allo studente di fare quanto segue (rappresenterà passi schematicamente):
ho suggerito di definire una classe che, come il suo membro, avrà la matrice 2D. E per definire un'operazione che restituirà riferimento su A [j, n + 1-i] elemento quando l'utente richiederà A [i, j] uno. In due parole ho suggerito di creare un wrapper per l'array e di manipolarlo per mezzo del wrapper.
La soluzione in realtà non risolve il problema. Stai solo restituendo l'elemento corretto per ogni query, ma in realtà non lo stai ruotando come ti chiede il problema. +1 per un problema interessante però. – IVlad
@IVlad: in realtà, risolvere rimane una questione di vista. Potete essere certi che i programmi come Matlab implementano la trasposizione di matrici, semplicemente usando uno stato e getter appropriati, senza reali trasformazioni. Certo, dubito che i miei insegnanti accetterebbero questa risposta in un esame: D. – KillianDS
Atention !!! Tutte quelle soluzioni usano un nuovo array! La soluzione dovrebbe essere senza usare un nuovo array. – Narek