Sea M una matriz cuadrada 2N × 2N. El plegado de una matriz consiste en plegar la matriz de enteros primero por la línea horizontal que divide la matriz, y después por la línea vertical.
Por ejemplo, sea la siguiente matriz con cuatro cuadrantes A,B,C,D, el plegado hace que la parte superior (A,B) se superponga con la parte inferior (C,D), y el segundo plegado hace que la parte de la derecha (B,D) se superponga con la de la izquierda (A,C).
============= ============= ===========
| | | | | | | |
| A | B | ==> | A,C | B,D | ==> | A,B,C,D |
| | | | | | | |
plego --> ------------- ------------- -----------
| | | ^
| C | D | |
| | | |
============= plego
Fíjese que en este caso, la matriz pasa de ser de 2N × 2N a una matriz N × N en la que cada posición tiene 4 números de la matriz original superpuestos.
El siguiente ejemplo muestra qué posiciones se superponen con otras según su número. Esto significa que todas las cuatro posiciones que tienen el número 1 se superponen, las que tienen el número 2 también, etc.
<---- 2N ------>
################ ^
# 1 2 | 2 1 # |
# 3 4 | 4 3 # |
#--------------# 2N
# 3 4 | 4 3 # |
# 1 2 | 2 1 # |
################ v
Es necesario implementar la acción void plegaMatriu(const Matriu& m, Matriu& r)
con la siguiente especificación:
PRE: m una matriz 2N × 2N de enteros.
POST: r es una matriz N × N en la que en cada posición
tiene la suma de los elementos de m superpuestos
por el plegado de m.
Observación
IMPORTANTE: Sólo hay que enviar la acción que se pide, y quizás otras acciones y funciones necesarias. Hay que mantener, sin embargo, las definiciones de tipos y los #includes.
Entrada
Una matriz 2N × 2N.
Salida
Una matriz N × N en la que en cada posición tiene la suma de los elementos de m superpuestos por el plegado de m.
ENTRADA 1: 4 1 2 2 1 3 4 4 3 3 4 4 3 1 2 2 1 SORTIDA 1: 4 8 12 16 ENTRADA 2: 8 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 SORTIDA 2: 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ENTRADA 3: 2 1 3 2 4 SORTIDA 3: 10