logo

Pārbaudiet horizontālo un vertikālo simetriju binārajā matricā

Dota 2D binārā matrica no N rindas un M kolonnas. Uzdevums ir pārbaudīt, vai matrica ir horizontāli simetriska vertikāla simetriska vai abas. Tiek uzskatīts, ka matrica ir horizontāli simetriska, ja pirmā rinda ir tāda pati kā pēdējā, otrā rinda ir tāda pati kā otrā pēdējā rinda un tā tālāk. Un matrica tiek uzskatīta par vertikāli simetrisku, ja pirmā kolonna ir tāda pati kā pēdējā kolonna, otrā kolonna ir tāda pati kā otrā pēdējā kolonna un tā tālāk.

Drukāt VERTIKĀLS "ja matrica ir vertikāli simetriska" HORIZONTĀLĀ "ja matrica ir vertikāli simetriska" ABI "ja matrica ir vertikāla un horizontāla simetriska un" ja ne simetrisks.

Piemēri:   



Ievade: N = 3 M = 3
0 1 0
0 0 0
0 1 0
Izvade: Abi
Paskaidrojums: Pirmā un trešā rinda ir vienādas, un arī otrā rinda ir vidū. Tātad horizontāli simetriski. Līdzīgi pirmā un trešā kolonna ir vienādas, un arī otrā kolonna atrodas vidū, tāpēc vertikāli simetriska.

Ievade: N = 3 M = 3
0 0 1
1 10
0 0 1
Izvade: Abi 

Pieeja: Ideja ir izmantot norādes, kas norāda divas rindas (vai kolonnas), un salīdzināt katru abu norādīto rindu (vai kolonnu) šūnu. 

blakus esošie leņķi
  • Horizontālajai simetrijai inicializējiet vienu rādītāju i = 0 un otru rādītāju j = N - 1. 
  • Tagad salīdziniet katru i-tās rindas un j-tās rindas elementu. Katrā cilpas ciklā palieliniet i par 1 un samaziniet j par 1. 
    • Ja tiek atrasts vismaz viens elements, kas nav identisks, atzīmējiet matricu kā nehorizontāli simetrisku.
  • Līdzīgi vertikālajai simetrijai inicializējiet vienu rādītāju i = 0 un otru rādītāju j = M - 1. 
  • Tagad salīdziniet katru i-tās kolonnas un j-tās kolonnas elementu. Katrā cilpas ciklā palieliniet i par 1 un samaziniet j par 1. 
    • Ja tiek atrasts vismaz viens elements, kas nav identisks, atzīmējiet matricu kā vertikāli simetrisku.

Tālāk ir sniegta iepriekš minētās idejas īstenošana: 

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> 

Izvade
BOTH

Laika sarežģītība: O(N*M).
Palīgtelpa: O(1)


Izveidojiet viktorīnu