Print a matrix in alternate manner (left to right then right to left)
Given a 2D array, the task is to print the 2D in alternate manner (First row from left to right, then from right to left, and so on).
Examples:
Input : arr[][2] = {{1, 2}
{2, 3}};
Output : 1 2 3 2
Input :arr[][3] = { { 7 , 2 , 3 },
{ 2 , 3 , 4 },
{ 5 , 6 , 1 }};
Output : 7 2 3 4 3 2 5 6 1
The solution of this problem is that run two loops and print row in left to right and right to left manners. We maintain a flag to see if current row should be printed from left to right or right to left. We toggle the flag after every iteration.
Implementation:
C++
#include<bits/stdc++.h>
using namespace std;
#define R 3
#define C 3
void convert( int arr[R][C])
{
bool leftToRight = true ;
for ( int i=0; i<R; i++)
{
if (leftToRight)
{
for ( int j=0; j<C; j++)
printf ( "%d " , arr[i][j]);
}
else
{
for ( int j=C-1; j>=0; j--)
printf ( "%d " ,arr[i][j]);
}
leftToRight = !leftToRight;
}
}
int main()
{
int arr[][C] =
{
{ 1 , 2 , 3 },
{ 3 , 2 , 1 },
{ 4 , 5 , 6 },
};
convert(arr);
return 0;
}
|
Java
class GFG {
static final int R = 3 ;
static final int C = 3 ;
static void convert( int arr[][]) {
boolean leftToRight = true ;
for ( int i = 0 ; i < R; i++) {
if (leftToRight) {
for ( int j = 0 ; j < C; j++) {
System.out.printf( "%d " , arr[i][j]);
}
} else {
for ( int j = C - 1 ; j >= 0 ; j--) {
System.out.printf( "%d " , arr[i][j]);
}
}
leftToRight = !leftToRight;
}
}
static public void main(String[] args) {
int arr[][]
= {
{ 1 , 2 , 3 },
{ 3 , 2 , 1 },
{ 4 , 5 , 6 },};
convert(arr);
}
}
|
Python 3
R = 3
C = 3
def convert(arr):
leftToRight = True
for i in range (R):
if (leftToRight):
for j in range (C):
print (arr[i][j], end = " " )
else :
for j in range (C - 1 , - 1 , - 1 ):
print (arr[i][j], end = " " )
leftToRight = not leftToRight
if __name__ = = "__main__" :
arr = [[ 1 , 2 , 3 ],
[ 3 , 2 , 1 ],
[ 4 , 5 , 6 ]]
convert(arr)
|
C#
using System;
public class GFG {
static readonly int R = 3;
static readonly int C = 3;
static void convert( int [,]arr) {
bool leftToRight = true ;
for ( int i = 0; i < R; i++) {
if (leftToRight) {
for ( int j = 0; j < C; j++) {
Console.Write(arr[i,j]+ " " );
}
} else {
for ( int j = C - 1; j >= 0; j--) {
Console.Write(arr[i,j]+ " " );
}
}
leftToRight = !leftToRight;
}
}
static public void Main() {
int [,]arr
= {
{1, 2, 3},
{3, 2, 1},
{4, 5, 6},};
convert(arr);
}
}
|
PHP
<?php
$R = 3;
$C = 3;
function convert( $arr )
{
global $R ;
global $C ;
$leftToRight = true;
for ( $i = 0; $i < $R ; $i ++)
{
if ( $leftToRight )
{
for ( $j = 0; $j < $C ; $j ++)
echo $arr [ $i ][ $j ], " " ;
}
else
{
for ( $j = $C - 1; $j >= 0; $j --)
echo $arr [ $i ][ $j ], " " ;
}
$leftToRight = ! $leftToRight ;
}
}
$arr = array ( array (1 , 2 , 3 ),
array (3 , 2 , 1 ),
array (4 , 5 , 6 ));
convert( $arr );
?>
|
Javascript
<script>
let R = 3;
let C = 3;
function convert(arr)
{
let leftToRight = true ;
for (let i = 0; i < R; i++) {
if (leftToRight) {
for (let j = 0; j < C; j++) {
document.write(arr[i][j]+ " " );
}
} else {
for (let j = C - 1; j >= 0; j--) {
document.write( arr[i][j]+ " " );
}
}
leftToRight = !leftToRight;
}
}
let arr =[[ 1 , 2 , 3 ],
[ 3 , 2 , 1 ],
[ 4 , 5 , 6 ]]
convert(arr)
</script>
|
Time Complexity : O(R*C)
Space Complexity : O(1)
Last Updated :
07 Jul, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...