以之字形方式打印矩阵

给定一个由n行和m列组成的2D数组矩阵。如图所示,以之字形打印此矩阵。

null

matrix_zag-zag

例子:

Input: 1 2 34 5 67 8 9Output: 1 2 4 7 5 3 6 8 9

C++代码的实现方法 方法很简单。只需一次迭代每个对角线元素,并根据之前的匹配更改方向。 Python3代码的实现方法 这种方法很简单。在以通常方式移动矩阵时,根据元素索引和的奇偶性,如果i和j的和分别为偶数或奇数,则在开始或结束时将该特定元素添加到列表中。按原样打印解决方案列表。

C++

/* C++ Program to print matrix in Zig-zag pattern*/
#include <iostream>
using namespace std;
#define C 3
// Utility function to print matrix
// in zig-zag form
void zigZagMatrix( int arr[][C], int n, int m)
{
int row = 0, col = 0;
// Boolean variable that will true if we
// need to increment 'row' value otherwise
// false- if increment 'col' value
bool row_inc = 0;
// Print matrix of lower half zig-zag pattern
int mn = min(m, n);
for ( int len = 1; len <= mn; ++len) {
for ( int i = 0; i < len; ++i) {
cout << arr[row][col] << " " ;
if (i + 1 == len)
break ;
// If row_increment value is true
// increment row and decrement col
// else decrement row and increment
// col
if (row_inc)
++row, --col;
else
--row, ++col;
}
if (len == mn)
break ;
// Update row or col value according
// to the last increment
if (row_inc)
++row, row_inc = false ;
else
++col, row_inc = true ;
}
// Update the indexes of row and col variable
if (row == 0) {
if (col == m - 1)
++row;
else
++col;
row_inc = 1;
}
else {
if (row == n - 1)
++col;
else
++row;
row_inc = 0;
}
// Print the next half zig-zag pattern
int MAX = max(m, n) - 1;
for ( int len, diag = MAX; diag > 0; --diag) {
if (diag > mn)
len = mn;
else
len = diag;
for ( int i = 0; i < len; ++i) {
cout << arr[row][col] << " " ;
if (i + 1 == len)
break ;
// Update row or col value according
// to the last increment
if (row_inc)
++row, --col;
else
++col, --row;
}
// Update the indexes of row and col variable
if (row == 0 || col == m - 1) {
if (col == m - 1)
++row;
else
++col;
row_inc = true ;
}
else if (col == 0 || row == n - 1) {
if (row == n - 1)
++col;
else
++row;
row_inc = false ;
}
}
}
// Driver code
int main()
{
int matrix[][3] = { { 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 } };
zigZagMatrix(matrix, 3, 3);
return 0;
}


JAVA

/* Java Program to print matrix in Zig-zag pattern*/
class GFG {
static final int C = 3 ;
// Utility function to print matrix
// in zig-zag form
static void zigZagMatrix( int arr[][], int n, int m) {
int row = 0 , col = 0 ;
// Boolean variable that will true if we
// need to increment 'row' value otherwise
// false- if increment 'col' value
boolean row_inc = false ;
// Print matrix of lower half zig-zag pattern
int mn = Math.min(m, n);
for ( int len = 1 ; len <= mn; ++len) {
for ( int i = 0 ; i < len; ++i) {
System.out.print(arr[row][col] + " " );
if (i + 1 == len)
break ;
// If row_increment value is true
// increment row and decrement col
// else decrement row and increment
// col
if (row_inc) {
++row;
--col;
} else {
--row;
++col;
}
}
if (len == mn)
break ;
// Update row or col value according
// to the last increment
if (row_inc) {
++row;
row_inc = false ;
} else {
++col;
row_inc = true ;
}
}
// Update the indexes of row and col variable
if (row == 0 ) {
if (col == m - 1 )
++row;
else
++col;
row_inc = true ;
} else {
if (row == n - 1 )
++col;
else
++row;
row_inc = false ;
}
// Print the next half zig-zag pattern
int MAX = Math.max(m, n) - 1 ;
for ( int len, diag = MAX; diag > 0 ; --diag) {
if (diag > mn)
len = mn;
else
len = diag;
for ( int i = 0 ; i < len; ++i) {
System.out.print(arr[row][col] + " " );
if (i + 1 == len)
break ;
// Update row or col value according
// to the last increment
if (row_inc) {
++row;
--col;
} else {
++col;
--row;
}
}
// Update the indexes of row and col variable
if (row == 0 || col == m - 1 ) {
if (col == m - 1 )
++row;
else
++col;
row_inc = true ;
}
else if (col == 0 || row == n - 1 ) {
if (row == n - 1 )
++col;
else
++row;
row_inc = false ;
}
}
}
// Driver code
public static void main(String[] args) {
int matrix[][] = {{ 1 , 2 , 3 }, { 4 , 5 , 6 }, { 7 , 8 , 9 }};
zigZagMatrix(matrix, 3 , 3 );
}
}
// This code is contributed by Anant Agarwal.


Python3

# Program to print matrix in Zig-zag pattern
matrix = [
[ 1 , 2 , 3 ,],
[ 4 , 5 , 6 ],
[ 7 , 8 , 9 ],
]
rows = 3
columns = 3
solution = [[] for i in range (rows + columns - 1 )]
for i in range (rows):
for j in range (columns):
sum = i + j
if ( sum % 2 = = 0 ):
#add at beginning
solution[ sum ].insert( 0 ,matrix[i][j])
else :
#add at end of the list
solution[ sum ].append(matrix[i][j])
# print the solution as it as
for i in solution:
for j in i:
print (j,end = " " )


C#

// C# Program to print matrix
// in Zig-zag pattern
using System;
class GFG {
static int C = 3;
// Utility function to print
// matrix in zig-zag form
static void zigZagMatrix( int [, ] arr, int n, int m)
{
int row = 0, col = 0;
// Boolean variable that will
// true if we need to increment
// 'row' valueotherwise false-
// if increment 'col' value
bool row_inc = false ;
// Print matrix of lower half
// zig-zag pattern
int mn = Math.Min(m, n);
for ( int len = 1; len <= mn; ++len) {
for ( int i = 0; i < len; ++i) {
Console.Write(arr[row, col] + " " );
if (i + 1 == len)
break ;
// If row_increment value is true
// increment row and decrement col
// else decrement row and increment
// col
if (row_inc) {
++row;
--col;
}
else {
--row;
++col;
}
}
if (len == mn)
break ;
// Update row or col value
// according to the last
// increment
if (row_inc) {
++row;
row_inc = false ;
}
else {
++col;
row_inc = true ;
}
}
// Update the indexes of row
// and col variable
if (row == 0) {
if (col == m - 1)
++row;
else
++col;
row_inc = true ;
}
else {
if (row == n - 1)
++col;
else
++row;
row_inc = false ;
}
// Print the next half
// zig-zag pattern
int MAX = Math.Max(m, n) - 1;
for ( int len, diag = MAX; diag > 0; --diag) {
if (diag > mn)
len = mn;
else
len = diag;
for ( int i = 0; i < len; ++i) {
Console.Write(arr[row, col] + " " );
if (i + 1 == len)
break ;
// Update row or col value
// according to the last
// increment
if (row_inc) {
++row;
--col;
}
else {
++col;
--row;
}
}
// Update the indexes of
// row and col variable
if (row == 0 || col == m - 1) {
if (col == m - 1)
++row;
else
++col;
row_inc = true ;
}
else if (col == 0 || row == n - 1) {
if (row == n - 1)
++col;
else
++row;
row_inc = false ;
}
}
}
// Driver code
public static void Main()
{
int [, ] matrix = { { 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 } };
zigZagMatrix(matrix, 3, 3);
}
}
// This code is contributed by vt_m.


PHP

<?php
// PHP Program to print
// matrix in Zig-zag pattern
$C = 3;
// Utility function
// to print matrix
// in zig-zag form
function zigZagMatrix( $arr ,
$n , $m )
{
$row = 0; $col = 0;
// Boolean variable that
// will true if we need
// to increment 'row'
// value otherwise false-
// if increment 'col' value
$row_inc = false;
// Print matrix of lower
// half zig-zag pattern
$mn = min( $m , $n );
for ( $len = 1;
$len <= $mn ; $len ++)
{
for ( $i = 0;
$i < $len ; $i ++)
{
echo ( $arr [ $row ][ $col ]. " " );
if ( $i + 1 == $len )
break ;
// If row_increment value
// is true increment row
// and decrement col else
// decrement row and
// increment col
if ( $row_inc )
{
$row ++; $col --;
}
else
{
$row --; $col ++;
}
}
if ( $len == $mn )
break ;
// Update row or col
// value according
// to the last increment
if ( $row_inc )
{
++ $row ; $row_inc = false;
}
else
{
++ $col ; $row_inc = true;
}
}
// Update the indexes of
// row and col variable
if ( $row == 0)
{
if ( $col == $m - 1)
++ $row ;
else
++ $col ;
$row_inc = 1;
}
else
{
if ( $row == $n - 1)
++ $col ;
else
++ $row ;
$row_inc = 0;
}
// Print the next half
// zig-zag pattern
$MAX = max( $m , $n ) - 1;
for ( $len , $diag = $MAX ;
$diag > 0; -- $diag )
{
if ( $diag > $mn )
$len = $mn ;
else
$len = $diag ;
for ( $i = 0;
$i < $len ; ++ $i )
{
echo ( $arr [ $row ][ $col ] . " " );
if ( $i + 1 == $len )
break ;
// Update row or col
// value according to
// the last increment
if ( $row_inc )
{
++ $row ; -- $col ;
}
else
{
++ $col ; -- $row ;
}
}
// Update the indexes of
// row and col variable
if ( $row == 0 ||
$col == $m - 1)
{
if ( $col == $m - 1)
++ $row ;
else
++ $col ;
$row_inc = true;
}
else if ( $col == 0 ||
$row == $n - 1)
{
if ( $row == $n - 1)
++ $col ;
else
++ $row ;
$row_inc = false;
}
}
}
// Driver code
$matrix = array ( array (1, 2, 3),
array (4, 5, 6),
array (7, 8, 9));
zigZagMatrix( $matrix , 3, 3);
// This code is contributed by
// Manish Shaw(manishshaw1)
?>


输出:

1 2 4 7 5 3 6 8 9 

时间复杂性: O(n*m) 辅助空间: O(1)

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享