Având în vedere o matrice binară 2D de N rânduri și M coloane. Sarcina este de a verifica dacă matricea este orizontală simetrică verticală simetrică sau ambele. Se spune că matricea este simetrică orizontală dacă primul rând este același cu ultimul rând, al doilea rând este același cu ultimul rând și așa mai departe. Și se spune că matricea este simetrică verticală dacă prima coloană este aceeași cu ultima coloană, a doua coloană este aceeași cu ultima coloană și așa mai departe.
care este sistemul de fișiere linux
Imprimați ' VERTICAL „dacă matricea este simetrică pe verticală” ORIZONTALĂ „dacă matricea este simetrică pe verticală” AMBELE ' dacă matricea este simetrică verticală și orizontală și ' NU ' dacă nu este simetric.
Exemple:
Intrare: N = 3 M = 3
0 1 0
0 0 0
0 1 0
Ieșire: ambele
Explicaţie: Primul și al treilea rând sunt același și, de asemenea, al doilea rând este în mijloc. Deci orizontal simetric. În mod similar, prima și a treia coloană sunt aceleași și, de asemenea, a doua coloană este în mijloc, deci simetrică verticală.Intrare: N = 3 M = 3
0 0 1
1 1 0
0 0 1
Ieșire: ambele
Abordare: Ideea este să folosiți indicatori care indică două rânduri (sau coloane) și să comparați fiecare celulă din ambele rânduri (sau coloane) ascuțite.
10 ml în oz
- Pentru simetrie orizontală, inițializați un indicator i = 0 și un alt indicator j = N - 1.
- Acum comparați fiecare element al rândului I și al rândului j. Creșteți i cu 1 și micșorați j cu 1 în fiecare ciclu de buclă.
- Dacă se găsește cel puțin un element care nu este identic, marcați matricea ca nesimetrică orizontală.
- În mod similar, pentru simetria verticală, inițializați un indicator i = 0 și un alt indicator j = M - 1.
- Acum comparați fiecare element al coloanei I și al coloanei j. Creșteți i cu 1 și micșorați j cu 1 în fiecare ciclu de buclă.
- Dacă se găsește cel puțin un element care nu este identic, marcați matricea ca nesimetrică verticală.
Mai jos este implementarea ideii de mai sus:
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>
Ieșire
BOTH
Complexitatea timpului: O(N*M).
Spațiu auxiliar: O(1)