# Print boundary elements of a given matrix in clockwise manner

• Difficulty Level : Basic
• Last Updated : 26 Apr, 2021

Given a matrix arr[][] of size N * M, the task is to print the boundary elements of the given matrix in a clockwise form.

Examples:

Attention reader! All those who say programming isn't for kids, just haven't met the right mentors yet. Join the  Demo Class for First Step to Coding Coursespecifically designed for students of class 8 to 12.

The students will get to learn more about the world of programming in these free classes which will definitely help them in making a wise career choice in the future.

Input: arr[][] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9} }
Output: 1 2 3 6 9 8 7 4
Explanation:
Boundary elements of the matrix are:
1 2 3
4 5 6
7 8 <strong>9
Therefore, the sequence of boundary elements in clockwise form is {1, 2, 3, 6, 9, 8, 7, 4}

Input: arr[][] = {{11, 12, 33}, {64, 57, 61}, {74, 88, 39}}
Output: 11 12 33 61 39 88 74 64

Naive Approach: The simplest approach to solve this problem is to traverse the given matrix and check if the current element is the boundary element or not. If found to be true, then print the element.

Time Complexity: O(N2)
Auxiliary Space: O(1)

Efficient Approach: To optimize the above approach, the idea is to traverse only the first and last rows and the first and last columns of the matrix. Follow the steps below to solve the problem:

• Print the first row of the matrix.
• Print the last column of the matrix except the first row.
• Print the last row of the matrix except the last column.
• Print the first column of the matrix except the first and last row.

Below is the implementation of the above approach:

## C++

 `// C++ program of the above approach``#include ``using` `namespace` `std;` `// Function to print the boundary elements``// of the matrix in clockwise``void` `boundaryTraversal(vector > 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 > 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

 ``
Output:
`1 2 3 6 9 8 7 4`

Time Complexity: O(N + M)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up