Dada una array binaria 2D de N filas y M columnas. La tarea es verificar si la array es simétrica horizontal, simétrica vertical o ambas. Se dice que la array es simétrica horizontalmente si la primera fila es igual a la última fila, la segunda fila es igual a la penúltima fila y así sucesivamente. Y se dice que la array es simétrica verticalmente si la primera columna es igual a la última columna, la segunda columna es igual a la penúltima columna, y así sucesivamente. Escriba «VERTICAL» si la array es simétrica verticalmente, «HORIZONTAL» si la array es simétrica verticalmente, «AMBOS» si la array es simétrica vertical y horizontal, y «NO» si no es simétrica.
Ejemplos:
Input: N = 3 M = 3 0 1 0 0 0 0 0 1 0 Output: Both First and third row are same and also second row is in middle. So Horizontal Symmetric. Similarly, First and third column are same and also second column is in middle, so Vertical Symmetric. Input: 0 0 1 1 1 0 0 0 1. Output: Both
La idea es usar punteros que indiquen dos filas (o columnas) y comparar cada celda de ambas filas (o columnas) señaladas.
Para la simetría horizontal, inicialice un puntero i = 0 y otro puntero j = N – 1.
Ahora, compare cada elemento de la i-ésima fila y la j-ésima fila. Aumente i en 1 y disminuya j en 1 en cada ciclo de bucle. Si se encuentra al menos uno, no un elemento idéntico, marque la array como no simétrica horizontal.
De manera similar, para la simetría vertical, inicialice un puntero i = 0 y otro puntero j = M – 1.
Ahora, compare cada elemento de la i-ésima columna y la j-ésima columna. Aumente i en 1 y disminuya j en 1 en cada ciclo de bucle. Si se encuentra al menos uno, no un elemento idéntico, marque la array como no simétrica vertical.
A continuación se muestra la implementación de la idea anterior:
Java
// Java program to find if // a matrix is symmetric. import java.io.*; public class GFG { static void checkHV(int[][] arr, int N, int M) { // Initializing as both horizontal // and vertical symmetric. boolean horizontal = true; boolean vertical = true; // Checking for Horizontal Symmetry. // We compare first row with last // row, second row with second // last row and so on. for (int i = 0, k = N - 1; i < N / 2; i++, k--) { // Checking each cell of a column. for (int j = 0; j < M; j++) { // check if every cell is identical if (arr[i][j] != arr[k][j]) { horizontal = false; break; } } } // Checking for Vertical Symmetry. We compare // first column with last column, second xolumn // with second last column and so on. for (int i = 0, k = M - 1; i < M / 2; i++, k--) { // Checking each cell of a row. for (int j = 0; j < N; j++) { // check if every cell is identical if (arr[i][j] != arr[k][j]) { horizontal = false; break; } } } if (!horizontal && !vertical) System.out.println("NO"); else if (horizontal && !vertical) System.out.println("HORIZONTAL"); else if (vertical && !horizontal) System.out.println("VERTICAL"); else System.out.println("BOTH"); } // Driver Code static public void main(String[] args) { int[][] mat = { { 1, 0, 1 }, { 0, 0, 0 }, { 1, 0, 1 } }; checkHV(mat, 3, 3); } } // This code is contributed by vt_m.
Producción:
BOTH
Complejidad temporal: O(N*M).
Consulte el artículo completo sobre Comprobar simetría horizontal y vertical en array binaria 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