Open In App

Print matrix in snake pattern from the last column

Improve
Improve
Like Article
Like
Save
Share
Report

Given a matrix of 2-Dimensional array of n rows and n columns. Print this matrix in snake fashion starting from column n-1 as shown in the figure below .

 matrix_traversal_snake 

Examples:

Input : mat[][] =  
1 2 3 
4 5 6
7 8 9
Output: 3 2 1 4 5 6 9 8 7

Input: mat[][] = 
1 2 3 4 
5 6 7 8 
9 10 11 12 
13 14 15 16
Output: 4 3 2 1 5 6 7 8 12 11 10 9 13 14 15 16

Algorithm:

  1. Start traversing from top right cell belonging to row 0 and column n-1.
  2. First move will always be a horizontal move towards LEFT(WEST) direction.
  3. Alternatively Horizontal and vertical moves are made during matrix traversal.
  4. In a single horizontal move, we traverse multiple cells till we reach any of the wall of the matrix.
  5. In a horizontal move, if the row is odd numbered, we move in RIGHT(EAST) direction else we move in LEFT(WEST) direction
  6. In a single vertical move, we traverse a single cell in DOWNWARDS direction.

Below is the implementation of the above algorithm: 

C++




// C++ program for traversing a matrix from column n-1
#include <bits/stdc++.h>
using namespace std;
 
// Function used for traversing over the given matrix
void traverseMatrix(vector<vector<int> > mat, int n)
{
 
    for (int i = 0; i < n; i++) {
        if (i%2 == 1)
            for (int j = 0; j < n; j++)
                printf("%d ", mat[i][j]);
 
        else
            for (int j = n - 1; j >= 0; j--)
                printf("%d ", mat[i][j]);
    }
}
 
// Driver function
int main()
{
 
    // number of rows and columns
    int n = 5;
 
    // 5x5 matrix
    vector<vector<int> > mat{
        { 1, 2, 3, 4, 5 },
        { 6, 7, 8, 9, 10 },
        { 11, 12, 13, 14, 15 },
        { 16, 17, 18, 19, 20 },
        { 21, 22, 23, 24, 25 }
    };
 
    traverseMatrix(mat, n);
 
    return 0;
}


Java




// Java program for traversing a matrix from column n-1
 
class GFG {
 
    // Function used for traversing over the given matrix
    static void traverseMatrix(int[][] mat, int n)
    {
 
        for (int i = 0; i < n; i++) {
            if (i % 2 == 1) {
                for (int j = 0; j < n; j++) {
                    System.out.print(
                        Integer.toString(mat[i][j]) + " ");
                }
            }
            else {
                for (int j = n - 1; j >= 0; j--) {
                    System.out.print(
                        Integer.toString(mat[i][j]) + " ");
                }
            }
        }
    }
 
    // Driver function
    public static void main(String[] args)
    {
 
        // number of rows and columns
        int n = 5;
 
        // 5x5 matrix
        int[][] mat = {
            { 1, 2, 3, 4, 5 },
            { 6, 7, 8, 9, 10 },
            { 11, 12, 13, 14, 15 },
            { 16, 17, 18, 19, 20 },
            { 21, 22, 23, 24, 25 }
        };
 
        traverseMatrix(mat, n);
 
        System.exit(0);
    }
}


Python3




# Python3 program for traversing a matrix from column n-1
import sys;
 
# Function used for traversing over the given matrix
def traverseMatrix(mat, n):
 
    for i in range(n):
        if i & 1:
            for j in range(n):
                print(str(mat[i][j])+ "", end = " ")
        else:
            for j in range(n-1, -1, -1):
                print(str(mat[i][j])+ "", end = " ")
 
# Driver function
if __name__ == '__main__':
 
    # number of rows and columns
    n = 5
 
    # 5x5 matrix
    mat =[
         [12345],
         [678910],
         [11, 12, 13, 14, 15],
         [16, 17, 18, 19, 20],
         [21, 22, 23, 24, 25]
    ]
 
    traverseMatrix(mat, n)


C#




// CSHARP program for traversing a matrix from column n-1
 
using System;
using System.Linq;
 
class GFG {
 
    // Function used for traversing over the given matrix
    static void traverseMatrix(int[, ] mat, int n)
    {
 
        for (int i = 0; i < n; i++) {
            if (i % 2 == 1) {
                for (int j = 0; j < n; j++) {
                    Console.Write(mat[i, j].ToString() + " ");
                }
            }
            else {
                for (int j = n - 1; j >= 0; j--) {
                    Console.Write(mat[i, j].ToString() + " ");
                }
            }
        }
    }
 
    // Driver function
    public static void Main()
    {
 
        // number of rows and columns
        int n = 5;
 
        // 5x5 matrix
        int[, ] mat = {
            { 1, 2, 3, 4, 5 },
            { 6, 7, 8, 9, 10 },
            { 11, 12, 13, 14, 15 },
            { 16, 17, 18, 19, 20 },
            { 21, 22, 23, 24, 25 }
        };
 
        traverseMatrix(mat, n);
    }
}


PHP




<?php
// PHP program for traversing a matrix from column n-1
 
# Function used for traversing over the given matrix
function traverseMatrix($mat, $n){
 
    for($i = 0; $i < $n; $i++) {
        if($i & 1) {
            for($j = 0; $j < $n; $j++) {
                print($mat[$i][$j]." ");
            }
        }
        else {
            for($j = $n - 1; $j >= 0; $j--) {
                print($mat[$i][$j]." ");
            }   
        }
    }
}
 
 
// Driver function
 
# number of rows and columns
$n = 5;
 
#  5x5 matrix
$mat = array(
     array(1,  2,  3,  4,  5),
     array(6,  7,  8,  9,  10),
     array(11, 12, 13, 14, 15),
     array(16, 17, 18, 19, 20),
     array(21, 22, 23, 24, 25)
);
 
traverseMatrix($mat, $n);
 
?>


Javascript




<script>
    // Javascript program for traversing a matrix from column n-1
 
    // Function used for traversing over the given matrix
    function traverseMatrix(mat, n)
    {
        for (var i = 0; i < n; i++) {
            if (i % 2 == 1) {
                for (var j = 0; j < n; j++) {
                    document.write(mat[i][j] + " ");
                }
            }
            else {
                for (var j = n - 1; j >= 0; j--) {
                    document.write(mat[i][j] + " ");
                }
            }
        }
    }
     
    // number of rows and columns
    var n = 5;
     
    // 5x5 matrix
    var mat = [
        [ 1, 2, 3, 4, 5 ],
        [ 6, 7, 8, 9, 10 ],
        [ 11, 12, 13, 14, 15 ],
        [ 16, 17, 18, 19, 20 ],
        [ 21, 22, 23, 24, 25 ]
    ];
     
    traverseMatrix(mat, n);
     
    //This code is contributed by shruti456rawal
</script>


Output

5 4 3 2 1 6 7 8 9 10 15 14 13 12 11 16 17 18 19 20 25 24 23 22 21 

Complexity Analysis:

  • Time Complexity: O(N^2) 
  • Space Complexity: O(1)


Last Updated : 12 Sep, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads