C++ Program to Print matrix in zag-zag fashion
Given a matrix of 2D array of n rows and m columns. Print this matrix in ZIG-ZAG fashion as shown in figure.
Example:
Input: 1 2 3 4 5 6 7 8 9 Output: 1 2 4 7 5 3 6 8 9
Approach of C++ code
The approach is simple. Just simply iterate over every diagonal elements one at a time and change the direction according to the previous match.
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; } |
Output:
1 2 4 7 5 3 6 8 9
Time complexity: O(n*m)
Auxiliary space: O(1)
Please refer complete article on Print matrix in zig-zag fashion for more details!
Contact Us