Dada una array arr[][] de tamaño N * M , la tarea es imprimir los elementos de contorno de la array dada en el sentido de las agujas del reloj.
Ejemplos:
Entrada: arr[][] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9} }
Salida: 1 2 3 6 9 8 7 4
Explicación:
Elementos de contorno de la array son:
1 2 3
4 5 6
7 8 < strong>9
Por lo tanto, la secuencia de elementos de contorno en el sentido de las agujas del reloj es {1, 2, 3, 6, 9, 8, 7, 4} .
Entrada: arr[][] = {{11, 12, 33}, {64, 57, 61}, {74, 88, 39}}
Salida: 11 12 33 61 39 88 74 64
Enfoque ingenuo: el enfoque más simple para resolver este problema es atravesar la array dada y verificar si el elemento actual es el elemento límite o no . Si se encuentra que es cierto, imprima el elemento.
Complejidad de Tiempo: O(N 2 )
Espacio Auxiliar: O(1)
Enfoque eficiente: para optimizar el enfoque anterior, la idea es recorrer solo la primera y la última fila y la primera y la última columna de la array. Siga los pasos a continuación para resolver el problema:
- Imprime la primera fila de la array.
- Imprime la última columna de la array excepto la primera fila.
- Imprime la última fila de la array excepto la última columna.
- Imprime la primera columna de la array excepto la primera y la última fila.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program of the above approach #include <bits/stdc++.h> using namespace std; // Function to print the boundary elements // of the matrix in clockwise void boundaryTraversal(vector<vector<int> > arr, int N, int M) { // Print the first row for (int i = 0; i < M; i++) { cout << arr[0][i] << " "; } // Print the last column // except the first row for (int i = 1; i < N; i++) { cout << arr[i][M - 1] << " "; } // Print the last row // except the last column if (N > 1) { // Print the last row for (int i = M - 2; i >= 0; i--) { cout << arr[N - 1][i] << " "; } } // Print the first column except // the first and last row if (M > 1) { // Print the first column for (int i = N - 2; i > 0; i--) { cout << arr[i][0] << " "; } } } // Driver Code int main() { vector<vector<int> > arr{ { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; int N = arr.size(); int M = arr[0].size(); // Function Call boundaryTraversal(arr, N, M); return 0; } // This code is contributed by Dharanendra L V
Java
// Java program of the above approach import java.util.*; class GFG { // Function to print the boundary elements // of the matrix in clockwise public static void boundaryTraversal( int arr[][], int N, int M) { // Print the first row for (int i = 0; i < M; i++) { System.out.print(arr[0][i] + " "); } // Print the last column // except the first row for (int i = 1; i < N; i++) { System.out.print(arr[i][M - 1] + " "); } // Print the last row // except the last column if (N > 1) { // Print the last row for (int i = M - 2; i >= 0; i--) { System.out.print(arr[N - 1][i] + " "); } } // Print the first column except // the first and last row if (M > 1) { // Print the first column for (int i = N - 2; i > 0; i--) { System.out.print(arr[i][0] + " "); } } } // Driver Code public static void main(String[] args) { int arr[][] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; int N = arr.length; int M = arr[0].length; // Function Call boundaryTraversal(arr, N, M); } }
Python3
# Python program of the above approach # Function to print the boundary elements # of the matrix in clockwise def boundaryTraversal(arr, N, M): # Print the first row for i in range(M): print(arr[0][i], end = " "); # Print the last column # except the first row for i in range(1, N): print(arr[i][M - 1], end = " "); # Print the last row # except the last column if (N > 1): # Print the last row for i in range(M - 2, -1, -1): print(arr[N - 1][i], end = " "); # Print the first column except # the first and last row if (M > 1): # Print the first column for i in range(N - 2, 0, -1): print(arr[i][0], end = " "); # Driver Code if __name__ == '__main__': arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]; N = len(arr); M = len(arr[0]); # Function Call boundaryTraversal(arr, N, M); # This code is contributed by 29AjayKumar
C#
// C# program of the above approach using System; class GFG{ // Function to print the boundary elements // of the matrix in clockwise static void boundaryTraversal(int[,] arr, int N, int M) { // Print the first row for(int i = 0; i < M; i++) { Console.Write(arr[0, i] + " "); } // Print the last column // except the first row for(int i = 1; i < N; i++) { Console.Write(arr[i, M - 1] + " "); } // Print the last row // except the last column if (N > 1) { // Print the last row for(int i = M - 2; i >= 0; i--) { Console.Write(arr[N - 1, i] + " "); } } // Print the first column except // the first and last row if (M > 1) { // Print the first column for(int i = N - 2; i > 0; i--) { Console.Write(arr[i, 0] + " "); } } } // Driver code static void Main() { int[,] arr = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; int N = 3; int M = 3; // Function Call boundaryTraversal(arr, N, M); } } // This code is contributed by divyeshrabadiya07
Javascript
<script> // Javascript program of the above approach // Function to print the boundary elements // of the matrix in clockwise function boundaryTraversal(arr, N, M) { // Print the first row for (let i = 0; i < M; i++) { document.write(arr[0][i] + " "); } // Print the last column // except the first row for (let i = 1; i < N; i++) { document.write(arr[i][M - 1] + " "); } // Print the last row // except the last column if (N > 1) { // Print the last row for (let i = M - 2; i >= 0; i--) { document.write(arr[N - 1][i] + " "); } } // Print the first column except // the first and last row if (M > 1) { // Print the first column for (let i = N - 2; i > 0; i--) { document.write(arr[i][0] + " "); } } } // Driver Code let arr = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]; let N = arr.length; let M = arr[0].length; // Function Call boundaryTraversal(arr, N, M); </script>
1 2 3 6 9 8 7 4
Complejidad temporal: O(N + M)
Espacio auxiliar: O(1)