Print a matrix in Reverse Wave Form - GeeksforGeeks

03 Feb, 2022
Given a matrix, print it in Reverse Wave Form. 
Examples : 
Input :  1  2  3  4
         5  6  7  8
         9  10 11 12
         13 14 15 16
Output : 4 8 12 16 15 11 7 3 2 6 10 14 13 9 5 1

Input :  1  9  4  10
         3  6  90 11
         2  30 85 72
         6  31 99 15 
Output : 10 11 72 15 99 85 90 4 9 6 30 31 6 2 3 1
Approach :To get the reverse wave form for a given matrix, we first print the elements of the last column of the matrix in downward direction then print the elements of the 2nd last column in the upward direction, then print the elements in third last column in downward direction and so on. For example 1, the flow goes like :  
Below is the implementation to print reverse wave form of a matrix :  
C++
Java
Python3
C#
PHP
Javascript
// C++ implementation to print// reverse wave form of matrix#include<bits/stdc++.h>using namespace std; #define R 4#define C 4 // function to print reverse wave// form for a given matrixvoid WavePrint(int m, int n, int arr[R][C]){    int i, j = n - 1, wave = 1;     /* m     - Ending row index        n     - Ending column index        i, j     - Iterator        wave     - for Direction        wave = 1 - Wave direction down        wave = 0 - Wave direction up   */    while (j >= 0) {                 // Check whether to go in        // upward or downward        if (wave == 1) {                         // Print the element of the matrix            // downward since the value of wave = 1            for (i = 0; i < m; i++)                cout << arr[i][j] << " ";                        wave = 0;            j--;        }        else {                         // Print the elements of the            // matrix upward since the value            // of wave = 0            for (i = m - 1; i >= 0; i--)                cout << arr[i][j] << " ";                         wave = 1;            j--;        }    }} // driver functionint main(){    int arr[R][C] = { { 1, 2, 3, 4 },                      { 5, 6, 7, 8 },                      { 9, 10, 11, 12 },                      { 13, 14, 15, 16 } };                       WavePrint(R, C, arr);         return 0;}
// Java implementation to print// reverse wave form of matriximport java.io.*; class GFG{    static int R = 4;    static int C = 4;         // function to print reverse wave    // form for a given matrix    static void WavePrint(int m, int n, int arr[][])    {        int i, j = n - 1, wave = 1;             // m- Ending row index        //n - Ending column index        //i, j     - Iterator        //wave     - for Direction        //wave = 1 - Wave direction down        //wave = 0 - Wave direction up */        while (j >= 0)        {                         // Check whether to go in            // upward or downward            if (wave == 1)            {                // Print the element of the matrix                // downward since the value of wave = 1                for (i = 0; i < m; i++)                    System.out.print(arr[i][j] +" ");                             wave = 0;                j--;            }            else {                                 // Print the elements of the                // matrix upward since the value                // of wave = 0                for (i = m - 1; i >= 0; i--)                    System.out.print( arr[i][j] + " ");                                 wave = 1;                j--;            }        }    }         // Driver function    public static void main (String[] args)    {        int arr[][] = { { 1, 2, 3, 4 },                    { 5, 6, 7, 8 },                    { 9, 10, 11, 12 },                    { 13, 14, 15, 16 } };                    WavePrint(R, C, arr);           }} // This code is contributed by vt_m
# Python3 implementation to print# reverse wave form of matrix R = 4C = 4 # function to print reverse wave# form for a given matrixdef wavePrint(m, n, arr):    j = n - 1    wave = 1         # m     - Ending row index    # n     - Ending column index    # i, j     - Iterator    # wave     - for Direction    # wave = 1 - Wave direction down    # wave = 0 - Wave direction up    while j >= 0:                 # Check whether to go in        # upward or downward        if wave == 1:                 # Print the element of the            # matrix downward since the                        # value of wave = 1            for i in range(m):                print(arr[i][j], end = " "),            wave = 0            j -= 1                                  else:            # Print the elements of the            # matrix upward since the            # value of wave = 0            for i in range(m - 1, -1, -1):                print(arr[i][j], end = " "),                             wave = 1            j -= 1 # Driver codearr = [ [ 1, 2, 3, 4 ],        [ 5, 6, 7, 8 ],        [ 9, 10, 11, 12 ],        [ 13, 14, 15, 16 ] ]         wavePrint(R, C, arr) # This code is contributed by# Upendra Singh Bartwal
// C# implementation to print// reverse wave form of matrixusing System; class GFG {         static int R = 4;    static int C = 4;         // function to print reverse wave    // form for a given matrix    static void WavePrint(int m, int n, int [,]arr)    {                 int i, j = n - 1, wave = 1;             // m- Ending row index        // n - Ending column index        // i, j - Iterator        // wave - for Direction        // wave = 1 - Wave direction down        // wave = 0 - Wave direction up */        while (j >= 0)        {                         // Check whether to go in            // upward or downward            if (wave == 1) {                                 // Print the element of the                // matrix downward since the                // value of wave = 1                for (i = 0; i < m; i++)                    Console.Write(arr[i,j] + " ");                             wave = 0;                j--;            }                         else {                                 // Print the elements of the                // matrix upward since the value                // of wave = 0                for (i = m - 1; i >= 0; i--)                    Console.Write( arr[i,j] + " ");                                 wave = 1;                j--;            }        }    }         // Driver function    public static void Main ()    {        int [,]arr = { { 1, 2, 3, 4 },                       { 5, 6, 7, 8 },                       { 9, 10, 11, 12 },                       { 13, 14, 15, 16 } };                                WavePrint(R, C, arr);         }} // This code is contributed by vt_m.
<?php// PHP implementation to print// reverse wave form of matrix$R = 4;$C = 4; // function to print reverse// wave form for a given matrixfunction WavePrint($m, $n, $arr){    global $R;    global $C;     $i; $j = $n - 1; $wave = 1;     /*  m - Ending row index        n - Ending column index        i, j     - Iterator        wave     - for Direction        wave = 1 - Wave direction down        wave = 0 - Wave direction up */    while ($j >= 0)    {                 // Check whether to go in        // upward or downward        if ($wave == 1)        {                         // Print the element of the            // matrix downward since the            // value of wave = 1            for ($i = 0; $i < $m; $i++)                echo $arr[$i][$j] , " ";                     $wave = 0;            $j--;        }        else        {                         // Print the elements of            // the matrix upward since            // the value of wave = 0            for ($i = $m - 1; $i >= 0; $i--)                echo $arr[$i][$j] , " ";                         $wave = 1;            $j--;        }    }} // Driver Code$arr = array(array(1, 2, 3, 4),             array(5, 6, 7, 8),             array(9, 10, 11, 12),             array(13, 14, 15, 16));                WavePrint($R, $C, $arr);     // This code is contributed by ajit?>
<script> // Javascript implementation to print// reverse wave form of matrixR = 4C = 4 // Function to print reverse wave// form for a given matrixfunction WavePrint(m, n, arr){    var i, j = n - 1, wave = 1;         /* m     - Ending row index       n     - Ending column index       i, j     - Iterator       wave     - for Direction       wave = 1 - Wave direction down       wave = 0 - Wave direction up */    while (j >= 0)    {                 // Check whether to go in        // upward or downward        if (wave == 1)        {                         // Print the element of the matrix            // downward since the value of wave = 1            for(i = 0; i < m; i++)                document.write( arr[i][j] + " ");                         wave = 0;            j--;        }        else        {                         // Print the elements of the            // matrix upward since the value            // of wave = 0            for(i = m - 1; i >= 0; i--)                document.write( arr[i][j] + " ");                         wave = 1;            j--;        }    }} // Driver codevar arr = [ [ 1, 2, 3, 4 ],            [ 5, 6, 7, 8 ],            [ 9, 10, 11, 12 ],            [ 13, 14, 15, 16 ] ];                   WavePrint(R, C, arr); // This code is contributed by itsok </script>
Output:  
4 8 12 16 15 11 7 3 2 6 10 14 13 9 5 1 
Complexity Analysis
Time Complexity: O(N2)
Auxiliary Space: O(1) 
jit_t
itsok
prasanna1995
pattern-printing
Matrix
School Programming
pattern-printing
Matrix
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Sudoku | Backtracking-7
Divide and Conquer | Set 5 (Strassen's Matrix Multiplication)
Count all possible paths from top left to bottom right of a mXn matrix
Program to multiply two matrices
Min Cost Path | DP-6
Python Dictionary
Arrays in C/C++
Inheritance in C++
Reverse a string in Java
C++ Classes and Objects