Skip to content
Related Articles

Related Articles

Print matrix in snake pattern

Improve Article
Save Article
  • Difficulty Level : Easy
  • Last Updated : 19 Sep, 2022
Improve Article
Save Article

Given an n x n matrix. In the given matrix, you have to print the elements of the matrix in the snake pattern.

Examples : 

Input: mat[][] = { {10, 20, 30, 40},

                            {15, 25, 35, 45},

                           {27, 29, 37, 48},

                           {32, 33, 39, 50}};
Output: 10 20 30 40 45 35 25 15 27 29 37 48 50 39 33 32 

Matrix printing

Input: mat[][] = { {1, 2, 3},

                             {4, 5, 6},

                             {7, 8, 9}};
Output: 1 2 3 6 5 4 7 8 9

Approach: Follow the steps below to solve the problem:

  • Traverse all rows. 
  • For every row, check if it is even or odd. 
  • If even, we print from left to right 
  • else print from right to left. 

Below is the implementation of above approach:

C++




// C++ program to print matrix in snake order
#include <iostream>
#define M 4
#define N 4
using namespace std;
 
void print(int mat[M][N])
{
    // Traverse through all rows
    for (int i = 0; i < M; i++) {
 
        // If current row is even, print from
        // left to right
        if (i % 2 == 0) {
            for (int j = 0; j < N; j++)
                cout << mat[i][j] << " ";
 
            // If current row is odd, print from
            // right to left
        }
        else {
            for (int j = N - 1; j >= 0; j--)
                cout << mat[i][j] << " ";
        }
    }
}
 
// Driver code
int main()
{
    int mat[M][N] = { { 10, 20, 30, 40 },
                      { 15, 25, 35, 45 },
                      { 27, 29, 37, 48 },
                      { 32, 33, 39, 50 } };
 
    print(mat);
    return 0;
}

Java




// Java program to print matrix in snake order
import java.util.*;
class GFG {
    static void print(int[][] mat)
    {
        // Traverse through all rows
        for (int i = 0; i < mat.length; i++) {
 
            // If current row is even, print from
            // left to right
            if (i % 2 == 0) {
                for (int j = 0; j < mat[0].length; j++)
                    System.out.print(mat[i][j] + " ");
 
                // If current row is odd, print from
                // right to left
            }
            else {
                for (int j = mat[0].length - 1; j >= 0; j--)
                    System.out.print(mat[i][j] + " ");
            }
        }
    }
 
    // Driver code
    public static void main(String[] args)
    {
        int mat[][] = new int[][] { { 10, 20, 30, 40 },
                                    { 15, 25, 35, 45 },
                                    { 27, 29, 37, 48 },
                                    { 32, 33, 39, 50 } };
 
        print(mat);
    }
}
/* This code is contributed by Mr. Somesh Awasthi */

Python3




# Python 3 program to print
# matrix in snake order
M = 4
N = 4
 
 
def printf(mat):
    global M, N
 
    # Traverse through all rows
    for i in range(M):
 
        # If current row is
        # even, print from
        # left to right
        if i % 2 == 0:
            for j in range(N):
                print(str(mat[i][j]),
                      end=" ")
 
        # If current row is
        # odd, print from
        # right to left
        else:
            for j in range(N - 1, -1, -1):
                print(str(mat[i][j]),
                      end=" ")
 
 
# Driver code
mat = [[10, 20, 30, 40],
       [15, 25, 35, 45],
       [27, 29, 37, 48],
       [32, 33, 39, 50]]
 
printf(mat)
 
# This code is contributed
# by ChitraNayal

C#




// C# program to print
// matrix in snake order
using System;
class GFG {
    static void print(int[, ] mat)
    {
        // Traverse through all rows
        for (int i = 0; i < mat.GetLength(0); i++) {
 
            // If current row is
            // even, print from
            // left to right
            if (i % 2 == 0) {
                for (int j = 0; j < mat.GetLength(1); j++)
                    Console.Write(mat[i, j] + " ");
 
                // If current row is
                // odd, print from
                // right to left
            }
            else {
                for (int j = mat.GetLength(1) - 1; j >= 0;
                     j--)
                    Console.Write(mat[i, j] + " ");
            }
        }
    }
 
    // Driver code
    public static void Main()
    {
        int[, ] mat = { { 10, 20, 30, 40 },
                        { 15, 25, 35, 45 },
                        { 27, 29, 37, 48 },
                        { 32, 33, 39, 50 } };
 
        print(mat);
    }
}
 
// This code is contributed
// by ChitraNayal

PHP




<?php
// PHP program to print
// matrix in snake order
$M= 4;
$N =4;
 
function printLN($mat)
{
    global $M;
    global $N;
     
    // Traverse through all rows
    for ($i = 0; $i < $M; $i++)
    {
 
        // If current row is even,
        // print from left to right
        if ($i % 2 == 0)
        {
            for ($j = 0; $j < $N; $j++)
                echo $mat[$i][$j], " ";
 
        // If current row is odd,
        // print from right to left
        }
        else
        {
            for ($j = $N - 1; $j >= 0; $j--)
                echo $mat[$i][$j] , " ";
        }
    }
}
 
// Driver code
$mat = array(array(10, 20, 30, 40),
             array(15, 25, 35, 45),
             array(27, 29, 37, 48),
             array(32, 33, 39, 50));
 
printLN($mat);
 
// This code is contributed by ajit
?>

Javascript




<script>
 
// Javascript program to print
// matrix in snake order
let M = 4;
let N = 4;
 
function print(mat)
{
     
    // Traverse through all rows
    for(let i = 0; i < M; i++)
    {
         
        // If current row is even, print from
        // left to right
        if (i % 2 == 0)
        {
            for(let j = 0; j < N; j++)
                document.write(mat[i][j] + " ");
 
        // If current row is odd, print from
        // right to left
        }
        else
        {
            for(let j = N - 1; j >= 0; j--)
                document.write(mat[i][j] + " ");
        }
    }
}
 
// Driver code
let mat = [ [ 10, 20, 30, 40 ],
            [ 15, 25, 35, 45 ],
            [ 27, 29, 37, 48 ],
            [ 32, 33, 39, 50 ] ];
 
print(mat);
 
// This code is contributed by rameshtravel07
</script>

Output

10 20 30 40 45 35 25 15 27 29 37 48 50 39 33 32 

Time Complexity: O(N x M), Traversing over all the elements of the matrix, therefore N X M elements are there.
Auxiliary Space: O(1)

This article is contributed by Rakesh Kumar. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks. 


My Personal Notes arrow_drop_up
Related Articles

Start Your Coding Journey Now!