Print Diagonal

Posted: 30 Nov, 2020
Difficulty: Moderate

PROBLEM STATEMENT

Try Problem

You are given a 2D matrix, your task is to return a 2D vector containing all elements of the matrix in a diagonal fashion.

Example:

Following will be the output of the above matrix:

1
5 2
9 6 3
13 10 7 4
14 11 8
15 12
16
Input Format:
The first line contains an Integer 'T' which denotes the number of test cases or queries to be run. Then the test cases follow.

The first line of each test case contains two space-separated integers ‘N’ and ‘M’ denoting the number of rows and columns of the matrix respectively.

N’ lines follow. Each of the next ‘N’ lines contains ‘M’ space-separated integers separated by space.
Output Format:
For each test case, return a 2D vector containing all elements of the matrix in a diagonal fashion.

The output of each test case should be printed in a separate line.
Note:
You are not required to print anything, it has already been taken care of. Just implement the function.
Constraints :
1 <= T <= 10
1 <= N <= 100
1 <= M <= 100
1 <= mat[i][j] <= 100

Time Limit : 1 sec.
Approach 1

We will try to solve the following problem by dividing it into two parts. In the first part, we will choose each element of the first column as a starting point and print diagonally upward starting at it. In the second part, we will choose each element of the last row as a starting point (except the first element as it has already been processed in the previous part) and print diagonally upward starting at it.

 

Algorithm :


1.   Implement the function ‘IsValid’ which checks whether we are within the boundaries of the matrix or not.

2.   Implement the function ‘traverseDiagonally’, which takes three parameters, 2D vector ‘MAT’, an integer ‘ROW’, and an integer ‘COL’.  

    1.   Initialize the 2D vector ‘ANS’.

    2.   Iterate through 0 to ‘ROW’ (say iterator, ‘k’).

         1.   Push element MAT[k][0] in the 2D vector ‘ANS’.

         2.   Initialize variable ‘i’ as ‘k’ - 1, and initialize variable ‘j’ as 1.  

         3.   While indices ‘i’ and ‘j’ are within the boundaries of the matrix.

              1.   Push element MAT[i][j] in the 2D vector ‘ANS’.

              2.   Decrement the ‘i’, and increment the ‘j’.

    3.   Iterate through 1 to ‘COL’ (say iterator, ‘k’).

         1.   Push element MAT[ROW-1][k] in the 2D vector ‘ANS’.

         2.   Initialize variable ‘i’ as ‘ROW’ - 2, and initialize variable ‘j’ as ‘k’+1.  

         3.   While indices ‘i’ and ‘j’ are within the boundaries of the matrix.

              1.   Push element MAT[i][j] in the 2D vector ‘ANS’.

              2.   Decrement the ‘i’, and increment the ‘j’.
 

Try Problem