Étant donné une matrice binaire 2D de N lignes et M colonnes. La tâche consiste à vérifier si la matrice est symétrique horizontale, symétrique verticale ou les deux. La matrice est dite symétrique horizontale si la première ligne est la même que la dernière ligne, la deuxième ligne est la même que l’avant-dernière ligne et ainsi de suite. Et la matrice est dite symétrique verticale si la première colonne est la même que la dernière colonne, la deuxième colonne est la même que l’avant-dernière colonne et ainsi de suite.
Imprimer ' VERTICALE 'si la matrice est symétrique verticalement' HORIZONTAL 'si la matrice est symétrique verticalement' LES DEUX ' si la matrice est symétrique verticale et horizontale et ' NON ' s'il n'est pas symétrique.
Exemples :
Saisir: N = 3 M = 3
0 1 0
0 0 0
0 1 0
Sortir: Les deux
Explication: La première et la troisième rangée sont identiques et la deuxième rangée est également au milieu. Donc symétrique horizontale. De même, la première et la troisième colonne sont identiques et la deuxième colonne est également au milieu, donc symétrique verticale.changer de programmation JavaSaisir: N = 3 M = 3
0 0 1
1 1 0
0 0 1
Sortir: Les deux
Approche: L'idée est d'utiliser des pointeurs indiquant deux lignes (ou colonnes) et de comparer chaque cellule des deux lignes (ou colonnes) pointées.
- Pour la symétrie horizontale, initialisez un pointeur i = 0 et un autre pointeur j = N - 1.
- Comparez maintenant chaque élément de la ième rangée et de la j-ième rangée. Augmentez i de 1 et diminuez j de 1 à chaque cycle de boucle.
- Si au moins un élément non identique est trouvé, marquez la matrice comme non symétrique horizontale.
- De même pour la symétrie verticale, initialisez un pointeur i = 0 et un autre pointeur j = M - 1.
- Comparez maintenant chaque élément de la ième colonne et de la j-ième colonne. Augmentez i de 1 et diminuez j de 1 à chaque cycle de boucle.
- Si au moins un élément non identique est trouvé, marquez la matrice comme non symétrique verticalement.
Vous trouverez ci-dessous la mise en œuvre de l’idée ci-dessus :
couverture du relevéC++
// C++ program to find if a matrix is symmetric. #include #define MAX 1000 using namespace std; void checkHV(int arr[][MAX] int N int M) { // Initializing as both horizontal and vertical // symmetric. bool horizontal = true 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 column // with second last column and so on. for (int j = 0 k = M - 1; j < M / 2; j++ k--) { // Checking each cell of a row. for (int i = 0; i < N; i++) { // check if every cell is identical if (arr[i][j] != arr[i][k]) { vertical = false; break; } } } if (!horizontal && !vertical) cout << 'NOn'; else if (horizontal && !vertical) cout << 'HORIZONTALn'; else if (vertical && !horizontal) cout << 'VERTICALn'; else cout << 'BOTHn'; } // Driven Program int main() { int mat[MAX][MAX] = { { 0 1 0 } { 0 0 0 } { 0 1 0 } }; checkHV(mat 3 3); return 0; }
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 column // with second last column and so on. for (int j = 0 k = M - 1; j < M / 2; j++ k--) { // Checking each cell of a row. for (int i = 0; i < N; i++) { // check if every cell is identical if (arr[i][j] != arr[i][k]) { 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.
Python3 # Python3 program to find if a matrix is symmetric. MAX = 1000 def checkHV(arr N M): # Initializing as both horizontal and vertical # symmetric. horizontal = True vertical = True # Checking for Horizontal Symmetry. We compare # first row with last row second row with second # last row and so on. i = 0 k = N - 1 while(i < N // 2): # Checking each cell of a column. for j in range(M): # check if every cell is identical if (arr[i][j] != arr[k][j]): horizontal = False break i += 1 k -= 1 # Checking for Vertical Symmetry. We compare # first column with last column second column # with second last column and so on. i = 0 k = M - 1 while(j < M // 2): # Checking each cell of a row. for i in range(N): # check if every cell is identical if (arr[i][j] != arr[i][k]): vertical = False break j += 1 k -= 1 if (not horizontal and not vertical): print('NO') elif (horizontal and not vertical): print('HORIZONTAL') elif (vertical and not horizontal): print('VERTICAL') else: print('BOTH') # Driver code mat = [[1 0 1] [0 0 0] [1 0 1]] checkHV(mat 3 3) # This code is contributed by shubhamsingh10
C# // C# program to find if // a matrix is symmetric. using System; public class GFG { static void checkHV(int[ ] arr int N int M) { // Initializing as both horizontal // and vertical symmetric. bool horizontal = true; bool vertical = true; // Checking for Horizontal Symmetry. // We compare first row with last // row second row with second // last row and so on. for (int j = 0 k = N - 1; j < N / 2; j++ k--) { // Checking each cell of a column. for (int i = 0; i < M; i++) { // check if every cell is identical if (arr[i j] != arr[i k]) { horizontal = false; break; } } } // Checking for Vertical Symmetry. We compare // first column with last column second column // 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) Console.WriteLine('NO'); else if (horizontal && !vertical) Console.WriteLine('HORIZONTAL'); else if (vertical && !horizontal) Console.WriteLine('VERTICAL'); else Console.WriteLine('BOTH'); } // Driver Code static public void Main() { int[ ] mat = { { 1 0 1 } { 0 0 0 } { 1 0 1 } }; checkHV(mat 3 3); } } // This code is contributed by vt_m.
PHP // PHP program to find if // a matrix is symmetric. function checkHV($arr $N $M) { // Initializing as both horizontal // and vertical symmetric. $horizontal = true; $vertical = true; // Checking for Horizontal Symmetry. // We compare first row with last row // second row with second last row // and so on. for ($i = 0 $k = $N - 1; $i < $N / 2; $i++ $k--) { // Checking each cell of a column. for ($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 column with // second last column and so on. for ($j = 0 $k = $M - 1; $j < $M / 2; $j++ $k--) { // Checking each cell of a row. for ($i = 0; $i < $N; $i++) { // check if every cell is identical if ($arr[$i][$j] != $arr[$i][$k]) { $horizontal = false; break; } } } if (!$horizontal && !$vertical) echo 'NOn'; else if ($horizontal && !$vertical) cout << 'HORIZONTALn'; else if ($vertical && !$horizontal) echo 'VERTICALn'; else echo 'BOTHn'; } // Driver Code $mat = array(array (1 0 1) array (0 0 0) array (1 0 1)); checkHV($mat 3 3); // This code is contributed by nitin mittal. ?> JavaScript <script> // Javascript program to find if // a matrix is symmetric. function checkHV(arr N M) { // Initializing as both horizontal // and vertical symmetric. let horizontal = true; let vertical = true; // Checking for Horizontal Symmetry. // We compare first row with last // row second row with second // last row and so on. for (let i = 0 k = N - 1; i < parseInt(N / 2 10); i++ k--) { // Checking each cell of a column. for (let 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 column // with second last column and so on. for (let j = 0 k = M - 1; j < parseInt(M / 2 10); j++ k--) { // Checking each cell of a row. for (let i = 0; i < N; i++) { // check if every cell is identical if (arr[i][j] != arr[i][k]) { horizontal = false; break; } } } if (!horizontal && !vertical) document.write('NO'); else if (horizontal && !vertical) document.write('HORIZONTAL'); else if (vertical && !horizontal) document.write('VERTICAL'); else document.write('BOTH'); } let mat = [ [ 1 0 1 ] [ 0 0 0 ] [ 1 0 1 ] ]; checkHV(mat 3 3); </script>
Sortir
BOTH
Complexité temporelle : O(N*M).
Espace auxiliaire : O(1)