Print a given matrix in waveform
The problem is to print a given matrix in waveform, which means displaying its elements in a zigzag manner. The waveform view starts from the top-left corner and goes down the first column, then up the second column, and continues this zigzag traversal until all elements are printed.
Example
Consider the following 7x6 matrix:
60 40 39 16 15 1
58 41 38 18 14 2
55 42 37 19 13 3
50 43 36 20 12 4
49 44 35 21 11 5
48 45 34 31 10 6
47 46 33 32 9 8
The waveform view of this matrix would be:
60 58 55 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 21 20 19 18 16 15 14 13 12 11 10 9 8 6 5 4 3 2 1
Idea to Solve the Problem
To print the matrix in waveform view, we can follow these steps:
- Traverse the matrix using a loop.
- Start from the first column (index 0) and move from top to bottom (i.e., row-wise).
- Print all elements in the current column from top to bottom.
- Move to the next column (index 1) and move from bottom to top (i.e., reverse row-wise).
- Print all elements in the current column from bottom to top.
- Continue this process until all elements in the matrix are printed.
Algorithm
- Create a function
wave_view(matrix)
to perform the waveform printing. - Initialize
row
andcol
as the number of rows and columns in the matrix. - Initialize
i = 0
,j = 0
, andc = 0
(to keep track of the current column). - Loop through the matrix using the variable
i
from 0 tocol
, and incrementc
by 1 in each iteration. - In each iteration of the loop, print all elements in the current column from top to bottom and then from bottom to top.
- Continue this process until all elements in the matrix are printed.
Pseudocode
wave_view(matrix):
row = number of rows in matrix
col = number of columns in matrix
i = 0, j = 0, c = 0
for i from 0 to col and increment c by 1 in each iteration:
print all elements in the current column from top to bottom
print all elements in the current column from bottom to top
Code Solution
/*
C Program
Print a given matrix in waveform
*/
#include <stdio.h>
#define ROW 7
#define COL 6
void wave_view(int matrix[ROW][COL])
{
int i = 0, j = 0, c = 0;
for (i = 0; i < COL && c < COL; ++i)
{
//Display top to bottom element
for (j = 0; j < ROW; ++j)
{
printf("%d ", matrix[j][c]);
}
c++;
//Display bottom to top element
for (j = ROW - 1; j >= 0 && c < COL; --j)
{
printf("%d ", matrix[j][c]);
}
c++;
}
}
int main()
{
int matrix[ROW][COL] = {
{60,40,39,16,15,1},
{58,41,38,18,14,2},
{55,42,37,19,13,3},
{50,43,36,20,12,4},
{49,44,35,21,11,5},
{48,45,34,31,10,6},
{47,46,33,32,9, 8}
};
wave_view(matrix);
return 0;
}
Output
60 58 55 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 21 20 19 18 16 15 14 13 12 11 10 9 8 6 5 4 3 2 1
/*
Java Program
Print a given matrix in waveform
*/
class MyMatrix
{
public void wave_view(int[][] matrix)
{
// Get the size
int row = matrix.length;
int col = matrix[0].length;
int i = 0, j = 0, c = 0;
for (i = 0; i < col && c < col; ++i)
{
//Display top to bottom element
for (j = 0; j < row; ++j)
{
System.out.print(" " + matrix[j][c]);
}
c++;
//Display bottom to top element
for (j = row - 1; j >= 0 && c < col; --j)
{
System.out.print(" " + matrix[j][c]);
}
c++;
}
}
public static void main(String[] args)
{
MyMatrix obj = new MyMatrix();
//Define matrix elements
int[][] matrix = {
{60,40,39,16,15,1},
{58,41,38,18,14,2},
{55,42,37,19,13,3},
{50,43,36,20,12,4},
{49,44,35,21,11,5},
{48,45,34,31,10,6},
{47,46,33,32,9, 8}
};
obj.wave_view(matrix);
}
}
Output
60 58 55 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 21 20 19 18 16 15 14 13 12 11 10 9 8 6 5 4 3 2 1
/*
C++ Program
Print a given matrix in waveform
*/
#include<iostream>
#define ROW 7
#define COL 6
using namespace std;
class MyMatrix
{
public: void wave_view(int matrix[ROW][COL])
{
// Get the size
int row = ROW;
int col = COL;
int i = 0, j = 0, c = 0;
for (i = 0; i < col && c < col; ++i)
{
//Display top to bottom element
for (j = 0; j < row; ++j)
{
cout << " " << matrix[j][c];
}
c++;
//Display bottom to top element
for (j = row - 1; j >= 0 && c < col; --j)
{
cout << " " << matrix[j][c];
}
c++;
}
}
};
int main()
{
MyMatrix obj = MyMatrix();
int matrix[ROW][COL] = {
{
60,
40,
39,
16,
15,
1
},
{
58,
41,
38,
18,
14,
2
},
{
55,
42,
37,
19,
13,
3
},
{
50,
43,
36,
20,
12,
4
},
{
49,
44,
35,
21,
11,
5
},
{
48,
45,
34,
31,
10,
6
},
{
47,
46,
33,
32,
9,
8
}
};
obj.wave_view(matrix);
return 0;
}
Output
60 58 55 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 21 20 19 18 16 15 14 13 12 11 10 9 8 6 5 4 3 2 1
/*
C# Program
Print a given matrix in waveform
*/
using System;
class MyMatrix
{
public void wave_view(int[,] matrix)
{
// Get the size
int row = matrix.GetLength(0);
int col = matrix.GetLength(1);
int i = 0, j = 0, c = 0;
for (i = 0; i < col && c < col; i++)
{
//Display top to bottom element
for (j = 0; j < row; j++)
{
Console.Write(" " + matrix[j,c]);
}
c++;
//Display bottom to top element
for (j = row - 1; j >= 0 && c < col; j--)
{
Console.Write(" " + matrix[j,c]);
}
c++;
}
}
public static void Main(String[] args)
{
MyMatrix obj = new MyMatrix();
int[,] matrix = {
{
60,
40,
39,
16,
15,
1
},
{
58,
41,
38,
18,
14,
2
},
{
55,
42,
37,
19,
13,
3
},
{
50,
43,
36,
20,
12,
4
},
{
49,
44,
35,
21,
11,
5
},
{
48,
45,
34,
31,
10,
6
},
{
47,
46,
33,
32,
9,
8
}
};
obj.wave_view(matrix);
}
}
Output
60 58 55 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 21 20 19 18 16 15 14 13 12 11 10 9 8 6 5 4 3 2 1
<?php
/*
Php Program
Print a given matrix in waveform
*/
class MyMatrix
{
public function wave_view( & $matrix)
{
// Get the size
$row = count($matrix);
$col = count($matrix[0]);
$i = 0;
$j = 0;
$c = 0;
for ($i = 0; $i < $col && $c < $col; ++$i)
{
//Display top to bottom element
for ($j = 0; $j < $row; ++$j)
{
echo(" ". $matrix[$j][$c]);
}
$c++;
//Display bottom to top element
for ($j = $row - 1; $j >= 0 && $c < $col; --$j)
{
echo(" ". $matrix[$j][$c]);
}
$c++;
}
}
}
function main()
{
$obj = new MyMatrix();
//Define matrix elements
$matrix = array(
array(60, 40, 39, 16, 15, 1),
array(58, 41, 38, 18, 14, 2),
array(55, 42, 37, 19, 13, 3),
array(50, 43, 36, 20, 12, 4),
array(49, 44, 35, 21, 11, 5),
array(48, 45, 34, 31, 10, 6),
array(47, 46, 33, 32, 9, 8));
$obj->wave_view($matrix);
}
main();
Output
60 58 55 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 21 20 19 18 16 15 14 13 12 11 10 9 8 6 5 4 3 2 1
/*
Node Js Program
Print a given matrix in waveform
*/
class MyMatrix
{
wave_view(matrix)
{
// Get the size
var row = matrix.length;
var col = matrix[0].length;
var i = 0;
var j = 0;
var c = 0;
for (i = 0; i < col && c < col; ++i)
{
//Display top to bottom element
for (j = 0; j < row; ++j)
{
process.stdout.write(" " + matrix[j][c]);
}
c++;
//Display bottom to top element
for (j = row - 1; j >= 0 && c < col; --j)
{
process.stdout.write(" " + matrix[j][c]);
}
c++;
}
}
}
function main(args)
{
var obj = new MyMatrix();
//Define matrix elements
var matrix = [
[60, 40, 39, 16, 15, 1],
[58, 41, 38, 18, 14, 2],
[55, 42, 37, 19, 13, 3],
[50, 43, 36, 20, 12, 4],
[49, 44, 35, 21, 11, 5],
[48, 45, 34, 31, 10, 6],
[47, 46, 33, 32, 9, 8]
];
obj.wave_view(matrix);
}
main();
Output
60 58 55 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 21 20 19 18 16 15 14 13 12 11 10 9 8 6 5 4 3 2 1
#
# Python 3 Program
# Print a given matrix in waveform
class MyMatrix :
def wave_view(self, matrix) :
# Get the size
row = len(matrix)
col = len(matrix[0])
i = 0
j = 0
c = 0
while (i < col and c < col) :
# Display top to bottom element
j = 0
while (j < row) :
print(" ", matrix[j][c], end = "")
j += 1
c += 1
# Display bottom to top element
j = row - 1
while (j >= 0 and c < col) :
print(" ", matrix[j][c], end = "")
j -= 1
c += 1
i += 1
def main() :
obj = MyMatrix()
matrix = [
[60, 40, 39, 16, 15, 1],
[58, 41, 38, 18, 14, 2],
[55, 42, 37, 19, 13, 3],
[50, 43, 36, 20, 12, 4],
[49, 44, 35, 21, 11, 5],
[48, 45, 34, 31, 10, 6],
[47, 46, 33, 32, 9, 8]
]
obj.wave_view(matrix)
if __name__ == "__main__": main()
Output
60 58 55 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 21 20 19 18 16 15 14 13 12 11 10 9 8 6 5 4 3 2 1
# Ruby Program
# Print a given matrix in waveform
class MyMatrix
def wave_view(matrix)
# Get the size
row = matrix.length
col = matrix[0].length
i = 0
j = 0
c = 0
while (i < col && c < col)
# Display top to bottom element
j = 0
while (j < row)
print(" ", matrix[j][c])
j += 1
end
c += 1
# Display bottom to top element
j = row - 1
while (j >= 0 && c < col)
print(" ", matrix[j][c])
j -= 1
end
c += 1
i += 1
end
end
end
def main()
obj = MyMatrix.new()
matrix = [
[60, 40, 39, 16, 15, 1],
[58, 41, 38, 18, 14, 2],
[55, 42, 37, 19, 13, 3],
[50, 43, 36, 20, 12, 4],
[49, 44, 35, 21, 11, 5],
[48, 45, 34, 31, 10, 6],
[47, 46, 33, 32, 9, 8]
]
obj.wave_view(matrix)
end
main()
Output
60 58 55 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 21 20 19 18 16 15 14 13 12 11 10 9 8 6 5 4 3 2 1
/*
Scala Program
Print a given matrix in waveform
*/
class MyMatrix
{
def wave_view(matrix: Array[Array[Int]]): Unit = {
// Get the size
var row: Int = matrix.length;
var col: Int = matrix(0).length;
var i: Int = 0;
var j: Int = 0;
var c: Int = 0;
while (i < col && c < col)
{
//Display top to bottom element
j = 0;
while (j < row)
{
print(" " + matrix(j)(c));
j += 1;
}
c += 1;
//Display bottom to top element
j = row - 1;
while (j >= 0 && c < col)
{
print(" " + matrix(j)(c));
j -= 1;
}
c += 1;
i += 1;
}
}
}
object Main
{
def main(args: Array[String]): Unit = {
var obj: MyMatrix = new MyMatrix();
var matrix: Array[Array[Int]] = Array(
Array(60, 40, 39, 16, 15, 1),
Array(58, 41, 38, 18, 14, 2),
Array(55, 42, 37, 19, 13, 3),
Array(50, 43, 36, 20, 12, 4),
Array(49, 44, 35, 21, 11, 5),
Array(48, 45, 34, 31, 10, 6),
Array(47, 46, 33, 32, 9, 8));
obj.wave_view(matrix);
}
}
Output
60 58 55 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 21 20 19 18 16 15 14 13 12 11 10 9 8 6 5 4 3 2 1
/*
Swift Program
Print a given matrix in waveform
*/
class MyMatrix
{
func wave_view(_ matrix: [
[Int]
])
{
// Get the size
let row: Int = matrix.count;
let col: Int = matrix[0].count;
var i: Int = 0;
var j: Int = 0;
var c: Int = 0;
while (i < col && c < col)
{
//Display top to bottom element
j = 0;
while (j < row)
{
print(" ", matrix[j][c], terminator: "");
j += 1;
}
c += 1;
//Display bottom to top element
j = row - 1;
while (j >= 0 && c < col)
{
print(" ", matrix[j][c], terminator: "");
j -= 1;
}
c += 1;
i += 1;
}
}
}
func main()
{
let obj: MyMatrix = MyMatrix();
let matrix: [
[Int]
] = [
[60, 40, 39, 16, 15, 1],
[58, 41, 38, 18, 14, 2],
[55, 42, 37, 19, 13, 3],
[50, 43, 36, 20, 12, 4],
[49, 44, 35, 21, 11, 5],
[48, 45, 34, 31, 10, 6],
[47, 46, 33, 32, 9, 8]
];
obj.wave_view(matrix);
}
main();
Output
60 58 55 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 21 20 19 18 16 15 14 13 12 11 10 9 8 6 5 4 3 2 1
Output Explanation
The given Java code implements the above algorithm to print the matrix in waveform view. It prints the elements in the waveform traversal, as described in the output.
Time Complexity
The time complexity of the provided solution is O(M * N), where M is the number of rows and N is the number of columns in the matrix. The function traverses the entire matrix once, and in each iteration, it performs constant time operations to print the elements. Therefore, the overall time complexity is O(M * N).
Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.
New Comment