logo

Tjek vandret og lodret symmetri i binær matrix

Givet en 2D binær matrix på N rækker og M kolonner. Opgaven er at kontrollere, om matricen er vandret symmetrisk vertikal symmetrisk eller begge dele. Matrixen siges at være vandret symmetrisk, hvis den første række er den samme som den sidste række, den anden række er den samme som den næstsidste række og så videre. Og matrixen siges at være lodret symmetrisk, hvis den første kolonne er den samme som den sidste kolonne, den anden kolonne er den samme som den næstsidste kolonne og så videre.

Udskriv ' LODRET ' hvis matrixen er lodret symmetrisk ' VANDRET ' hvis matrixen er lodret symmetrisk ' BEGGE ' hvis matrixen er lodret og vandret symmetrisk og ' INGEN ' hvis ikke symmetrisk.

gimp erstatte farve

Eksempler:   



Input: N = 3 M = 3
0 1 0
0 0 0
0 1 0
Produktion: Begge
Forklaring: Første og tredje række er ens, og også anden række er i midten. Så vandret symmetrisk. På samme måde er første og tredje kolonne ens, og også anden kolonne er i midten, så lodret symmetrisk.

Input: N = 3 M = 3
0 0 1
1 1 0
0 0 1
Produktion: Begge 

Nærme sig: Ideen er at bruge pegepinde, der angiver to rækker (eller kolonner) og sammenligne hver celle i begge de spidse rækker (eller kolonner). 

afgrænser java
  • For horisontal symmetri initialiseres en pointer i = 0 og en anden pointer j = N - 1. 
  • Sammenlign nu hvert element i i-te række og j-te række. Forøg i med 1 og reducer j med 1 i hver sløjfecyklus. 
    • Hvis der findes mindst et ikke identisk element, markeres matrixen som ikke vandret symmetrisk.
  • Tilsvarende initialiseres en pointer i = 0 for vertikal symmetri og en anden pointer j = M - 1. 
  • Sammenlign nu hvert element i i-te kolonne og j-te kolonne. Forøg i med 1 og reducer j med 1 i hver sløjfecyklus. 
    • Hvis der findes mindst ét ​​element, der ikke er identisk, marker matrixen som ikke lodret symmetrisk.

Nedenfor er implementeringen af ​​ovenstående idé: 

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> 

Produktion
BOTH

Tidskompleksitet: O(N*M).
Hjælpeplads: O(1)


c#
Opret quiz