Programa Java para Rotar Elementos de Array – Part 1

Matrix es simplemente una array bidimensional. Entonces, el objetivo es tratar con índices fijos en los que los elementos están presentes y realizar operaciones en los índices de modo que los elementos en el direccionado se intercambien de tal manera que se observe a medida que se gira la array. Aquí discutiremos dos métodos para tratar con índices.

  1. Usando un enfoque ingenuo 
  2. Usando el enfoque óptimo 

Método 1: Usar un enfoque ingenuo 

Para una array dada, la tarea es rotar sus elementos en el sentido de las agujas del reloj.

Ilustraciones:

For 4*4 matrix

Input:
7    8    9
10   11   12
2    3    4

Output:
10   7    8
2    11   9
3    4    12
For 4*4 matrix

Input:
4    5    6    7    
8    9    10   11
12   13   14   15
16   17   18   19

Output:
8    4    5    6
12   13   9    7
16   14   10   11
17   18   19   15

Acercarse:

Aquí, usaremos bucles para imprimir los elementos en forma de espiral. Donde, rotaremos todos los anillos de los elementos uno por uno, comenzando por el más externo. Y para rotar un anillo, necesitamos hacer lo siguiente:

  1. Mover los elementos de la fila superior,
  2. Mover los elementos de la última columna,
  3. Mueva los elementos de la fila inferior y
  4. Mueve los elementos de la primera columna.

Además, repita los pasos anteriores si también hay un anillo interior.

Ejemplo:

Java

// Java Program to Rotate Matrix Elements
 
// Importing classes from java.lang package
import java.lang.*;
// Importing classes from java.util package
import java.util.*;
 
// main Class
class GFG {
    static int r = 4;
    static int c = 4;
 
    // Method 
    // To rotate a matrix of
    // dimension r x c. And initially,
    // p = r and q = c
    static void rotate_matrix(int p, int q, int matrix[][])
    {
        int rw = 0, cl = 0;
        int previous, current;
 
        // rw is the Starting row index
        // p is the ending row index
        // cl is the starting column index
        // q is the ending column index and
        // x is the iterator
        while (rw < p && cl < q) {
 
            if (rw + 1 == p || cl + 1 == q)
                break;
 
            // After storing the first element of the
            // next row, this element will substitute
            // the first element of the current row
            previous = matrix[rw + 1][cl];
 
            // Moving the elements of the first row
            // from rest of the rows
            for (int x = cl; x < q; x++) {
                current = matrix[rw][x];
                matrix[rw][x] = previous;
                previous = current;
            }
            rw++;
 
            // Moving the elements of the last column
            // from rest of the columns
            for (int x = rw; x < p; x++) {
                current = matrix[x][q - 1];
                matrix[x][q - 1] = previous;
                previous = current;
            }
            q--;
 
            // Moving the elements of the last row
            // from rest of the rows
            if (rw < p) {
                for (int x = q - 1; x >= cl; x--) {
                    current = matrix[p - 1][x];
                    matrix[p - 1][x] = previous;
                    previous = current;
                }
            }
            p--;
 
            // Moving elements of the first column
            // from rest of the rows
            if (cl < q) {
                for (int x = p - 1; x >= rw; x--) {
                    current = matrix[x][cl];
                    matrix[x][cl] = previous;
                    previous = current;
                }
            }
            cl++;
        }
 
        // Prints the rotated matrix
        for (int x = 0; x < r; x++) {
            for (int y = 0; y < c; y++)
                System.out.print(matrix[x][y] + " ");
            System.out.print("\n");
        }
    }
     
    // Method 2
    // Main driver method
    public static void main(String[] args)
    {
 
        // Custom input array
        int b[][] = { { 5, 6, 7, 8 },
                      { 1, 2, 3, 4 },
                      { 0, 15, 6, 5 },
                      { 3, 1, 2, 12 } };
 
        // Calling function(Method1) to rotate matrix
        rotate_matrix(r, c, b);
    }
}
Producción

1 5 6 7 
0 15 2 8 
3 6 3 4 
1 2 12 5 

Método 2: Usar el enfoque óptimo 

Para una array dada de tamaño M×N, necesitamos rotar los elementos de la array k veces hacia el lado derecho. Donde k es un número.

Acercarse:

Un enfoque óptimo es observar cada fila de la array indicada como una array y luego ejecutar una rotación de array. Se realiza replicando los elementos de la array desde el número k dado hasta el final de una array hasta el comienzo de la array utilizando una array temporal. Y luego el resto de los elementos desde el inicio hasta ( k -1) hasta el final de una array.

Ilustración:

Input : M = 3, N = 3, k = 2
        1 2 3
        4 5 6
        7 8 9  

Output : 2 3 1
         5 6 4
         8 9 7 


Input : M = 2, N = 2, k = 2
        11 12
        13 14
         
Output : 11 12
         13 14

Ejemplo:

Java

// Java Program to Rotate Matrix to Right Side by K Times
 
// Main Class
public class GFG {
 
    // Dimension of the matrix
 
    // Initializing to custom values
    static final int P = 3;
    static final int Q = 3;
 
    // Method 1
    // To rotate the stated matrix by K times
    static void rotate_Matrix(int mat[][], int K)
    {
        // Using temporary array of dimension P
        int tempo[] = new int[P];
 
        // Rotating matrix by k times across the size of
        // matrix
        K = K % P;
 
        for (int j = 0; j < Q; j++) {
 
            // Copying first P-K elements
            // to the temporary array
            for (int l = 0; l < P - K; l++)
                tempo[l] = mat[j][l];
 
            // Copying the elements of the matrix
            // from K to the end to the starting
            for (int x = P - K; x < P; x++)
                mat[j][x - P + K] = mat[j][x];
 
            // Copying the elements of the matrix
            // from the temporary array to end
            for (int x = K; x < P; x++)
                mat[j][x] = tempo[x - K];
        }
    }
 
    // Method 2
    // To show the resultant matrix
    static void show_Matrix(int mat[][])
    {
        for (int j = 0; j < Q; j++) {
            for (int x = 0; x < P; x++)
                System.out.print(mat[j][x] + " ");
            System.out.println();
        }
    }
 
    // Method 3
    // Main driver method
    public static void main(String[] args)
    {
        // Custom input array
        int mat[][]
            = { { 1, 2, 5 }, { 3, 4, 6 }, { 8, 10, 9 } };
 
        // Custom value of K
        int K = 2;
 
        // Calling the above created method for
        // rotating matrix by k times
        rotate_Matrix(mat, K);
 
        // Calling the above method for
        // displaying rotated matrix
        show_Matrix(mat);
    }
}
Producción

2 5 1 
4 6 3 
10 9 8 

Complejidad de tiempo : O (R * C) donde R y C no son filas y columnas de la array dada, respectivamente

Publicación traducida automáticamente

Artículo escrito por Kanchan_Ray 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 *