Print boundary elements of a given matrix in clockwise manner - GeeksforGeeks

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:
Input: arr[][] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9} }Output: 1 2 3 6 9 8 7 4Explanation: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++
Java
Python3
C#
Javascript
// C++ program of the above approach#include <bits/stdc++.h>using namespace std; // Function to print the boundary elements// of the matrix in clockwisevoid 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 Codeint 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 program of the above approachimport 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);    }}
# Python program of the above approach # Function to print the boundary elements# of the matrix in clockwisedef 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 Codeif __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# program of the above approachusing System; class GFG{     // Function to print the boundary elements// of the matrix in clockwisestatic 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
<script> // Javascript program of the above approach // Function to print the boundary elements// of the matrix in clockwisefunction 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
 
Time Complexity: O(N + M)Auxiliary Space: O(1)
divyeshrabadiya07
29AjayKumar
dharanendralv23
nidhi_biet
souravmahato348
spiral
Matrix
School Programming
Matrix
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Flood fill Algorithm - how to implement fill() in paint?
Multiplication of Matrix using threads
Program to find the Sum of each Row and each Column of a Matrix
Mathematics | L U Decomposition of a System of Linear Equations
Python program to add two Matrices
Python Dictionary
Arrays in C/C++
Inheritance in C++
Reverse a string in Java
Interfaces in Java