Programa de Python para rotar una array en 180 grados

Dada una array cuadrada, la tarea es que la giremos 180 grados en sentido contrario a las agujas del reloj sin usar ningún espacio extra. 

Ejemplos: 

Input :  1  2  3
         4  5  6
         7  8  9
Output : 9 8 7 
         6 5 4 
         3 2 1

Input :  1 2 3 4 
         5 6 7 8 
         9 0 1 2 
         3 4 5 6 
Output : 6 5 4 3 
         2 1 0 9 
         8 7 6 5 
         4 3 2 1

Método: 1 (Solo imprime array rotada) 
La solución a este problema es que para rotar una array 180 grados podemos seguir fácilmente ese paso 

Matrix =  a00 a01 a02
          a10 a11 a12
          a20 a21 a22

when we rotate it by 90 degree
then matrix is
Matrix = a02 a12 a22
         a01 a11 a21
         a00 a10 a20
  
when we rotate it by again 90 
degree then matrix is 
Matrix = a22 a21 a20
         a12 a11 a10
         a02 a01 a00 

De la ilustración anterior , obtenemos que simplemente para rotar la array 180 grados, tendremos que imprimir la array dada de manera inversa.

Python3

# Python3 program to 
# rotate a matrix by 
# 180 degrees
N = 3;
  
# Function to Rotate 
# the matrix by 180 degree
def rotateMatrix(mat):
      
    # Simply print from
    # last cell to first cell.
    i = N - 1; 
    while(i >= 0):
        j = N - 1;
        while(j >= 0):
            print(mat[i][j], end = " ");
            j = j - 1;
        print();
        i = i - 1;
  
# Driven code
mat = [[1, 2, 3],
       [ 4, 5, 6 ],
       [ 7, 8, 9 ]];
rotateMatrix(mat);
  
# This code is contributed 
# by mits

Producción : 

 9 8 7 
 6 5 4 
 3 2 1  

Complejidad temporal: O(N*N) 
Espacio auxiliar: O(1)

Método: 2 (Rotación en el lugar) 
Hay cuatro pasos: 
1- Encuentra la transpuesta de una array. 
2- Columnas inversas de la transpuesta. 
3- Hallar la transpuesta de una array. 
4- Columnas inversas de la transpuesta

Let the given matrix be
1  2  3  4
5  6  7  8
9  10 11 12
13 14 15 16

First we find transpose.
1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16

Then we reverse elements of every column.
4 8 12 16
3 7 11 15
2 6 10 14
1 5  9 13

then transpose again 
4 3 2 1 
8 7 6 5 
12 11 10 9
16 15 14 13 

Then we reverse elements of every column again
16 15 14 13 
12 11 10 9 
8 7 6 5 
4 3 2 1

Python3

# Python3 program for left rotation of matrix by 180
   
R = 4
C = 4
   
# Function to rotate the matrix by 180 degree
def reverseColumns(arr):
    for i in range(C):
        j = 0
        k = C-1
        while j < k:
            t = arr[j][i]
            arr[j][i] = arr[k][i]
            arr[k][i] = t
            j += 1
            k -= 1
              
# Function for transpose of matrix
def transpose(arr):
    for i in range(R):
        for j in range(i, C):
            t = arr[i][j]
            arr[i][j] = arr[j][i]
            arr[j][i] = t
   
# Function for display the matrix
def printMatrix(arr):
    for i in range(R):
        for j in range(C):
            print(arr[i][j], end = " ");
        print();
   
# Function to anticlockwise rotate matrix
# by 180 degree
def rotate180(arr):
    transpose(arr);
    reverseColumns(arr);
    transpose(arr);
    reverseColumns(arr);
   
# Driven code
arr = [ [ 1, 2, 3, 4 ],
        [ 5, 6, 7, 8 ],
        [9, 10, 11, 12 ],
        [13, 14, 15, 16 ] ];
rotate180(arr);
printMatrix(arr);

Producción : 

 16 15 14 13 
 12 11 10 9 
 8 7 6 5 
 4 3 2 1

Complejidad temporal: O(R*C) 
Espacio auxiliar: O(1)
En el código anterior, la transposición de la array debe encontrarse dos veces y, además, las columnas deben invertirse dos veces. 
Entonces, podemos tener una mejor solución.

Método: 3 (Intercambio de posición)
Aquí, intercambiamos los valores en las posiciones respectivas. 

Python3

# Reverse Row at specified index in the matrix
def reverseRow(data, index):
      
    cols = len(data[index])
    for i in range(cols // 2):
        temp = data[index][i]
        data[index][i] = data[index][cols - i - 1]
        data[index][cols - i - 1] = temp
      
    return data
  
# Print Matrix data
def printMatrix(data):
      
    for i in range(len(data)):
        for j in range(len(data[0])):
            print(data[i][j], end = ' ')
          
        print()
  
# Rotate Matrix by 180 degrees
def rotateMatrix(data):
      
    rows = len(data)
    cols = len(data[0])
      
    if (rows % 2):
          
        # If N is odd reverse the middle
        # row in the matrix
        data = reverseRow(data, len(data) // 2)
          
        # Swap the value of matrix [i][j] with
        # [rows - i - 1][cols - j - 1] for half 
        # the rows size. 
        for i in range(rows // 2):
            for j in range(cols):
                temp = data[i][j]
                data[i][j] = data[rows - i - 1][cols - j - 1]
                data[rows - i - 1][cols - j - 1] = temp
          
        return data
          
# Driver Code
data = [ [ 1, 2, 3, 4, 5 ], 
         [ 6, 7, 8, 9, 10 ],
         [ 11, 12, 13, 14, 15 ],
         [ 16, 17, 18, 19, 20 ],
         [ 21, 22, 23, 24, 25 ] ]
           
# Rotate Matrix
data = rotateMatrix(data)
  
# Print Matrix
printMatrix(data)
  
# This code is contributed by rohitsingh07052

Producción : 

25 24 23 22 21 
20 19 18 17 16 
15 14 13 12 11 
10 9 8 7 6 
5 4 3 2 1 

Complejidad temporal : O(R*C) 
Espacio auxiliar : O(1)
 

Consulte el artículo completo sobre Rotar una array 180 grados para obtener más detalles.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *