Uno de mis alumnos me pidió este tipo de tarea con arreglos en C++. Me pareció bastante interesante, así que, aunque he resuelto este problema, quería compartir mi solución con usted y conocer otras variantes y opiniones. El problema es el siguiente:Gire una matriz 2D in situ sin utilizar una nueva matriz: ¿la mejor solución de C++?
Problema Se administra una matriz cuadrática (array) Una dinámica 2D (nxn). Se requiere girar la matriz 90 grados en el sentido contrario al de las agujas del reloj, es decir, después de la rotación Un campo [1,1] debe contener el valor del campo A [1, n] y A [1, n] debe contener el valor de Ana]. Y también se requiere que al resolver este problema no use otra matriz.
Mi solución Me han dicho que el estudiante para hacer lo siguiente (se representan esquemáticamente los pasos):
he sugerido para definir una clase que, como su miembro, tendrá la matriz 2D. Y para definir una operación que devolverá la referencia en Un elemento [j, n + 1-i] cuando el usuario solicite A [i, j] uno. En dos palabras, he sugerido crear una envoltura para la matriz y manipularla mediante una matriz a través de la envoltura.
Su solución no resuelve el problema en realidad. Simplemente está devolviendo el elemento correcto para cada consulta, pero en realidad no lo está girando como se lo pide el problema. +1 por un problema interesante sin embargo. – IVlad
@IVlad: en realidad, resolver queda como una cuestión de vista. Puede estar seguro de que así es como los programas como MATLAB implementan la matriz de transposición, solo usan un estado y getters apropiados, sin transformaciones reales. Por supuesto, dudo que mis profesores acepten esta respuesta en un examen: D. – KillianDS
¡¡Atención !!! ¡Todas esas soluciones usan una nueva matriz! La solución debería ser sin usar una nueva matriz. – Narek