Given a 2D matrix, print all elements of the given matrix in diagonal order. For example, consider the following 5 X 4 input matrix.

1     2     3     4
    5     6     7     8
    9    10    11    12
   13    14    15    16
   17    18    19    20

Diagonal printing of the above matrix is

 1
    5     2
    9     6     3
   13    10     7     4
   17    14    11     8
   18    15    12
   19    16
   20

Following is C++ code for diagonal printing

The diagonal printing of a given matrix ‘matrix[ROW][COL]’ always has ‘ROW + COL – 1’ lines in output

[ad type=”banner”]
 C Programming
[pastacode lang=”c” manual=”%23include%20%3Cstdio.h%3E%0A%23include%20%3Cstdlib.h%3E%0A%20%0A%23define%20ROW%205%0A%23define%20COL%204%0A%20%0A%2F%2F%20A%20utility%20function%20to%20find%20min%20of%20two%20integers%0Aint%20min(int%20a%2C%20int%20b)%0A%7B%20return%20(a%20%3C%20b)%3F%20a%3A%20b%3B%20%7D%0A%20%0A%2F%2F%20A%20utility%20function%20to%20find%20min%20of%20three%20integers%0Aint%20min(int%20a%2C%20int%20b%2C%20int%20c)%0A%7B%20return%20min(min(a%2C%20b)%2C%20c)%3B%7D%0A%20%0A%2F%2F%20A%20utility%20function%20to%20find%20max%20of%20two%20integers%0Aint%20max(int%20a%2C%20int%20b)%0A%7B%20return%20(a%20%3E%20b)%3F%20a%3A%20b%3B%20%7D%0A%20%0A%2F%2F%20The%20main%20function%20that%20prints%20given%20matrix%20in%20diagonal%20order%0Avoid%20diagonalOrder(int%20matrix%5B%5D%5BCOL%5D)%0A%7B%0A%20%20%20%20%2F%2F%20There%20will%20be%20ROW%2BCOL-1%20lines%20in%20the%20output%0A%20%20%20%20for%20(int%20line%3D1%3B%20line%3C%3D(ROW%20%2B%20COL%20-1)%3B%20line%2B%2B)%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%2F*%20Get%20column%20index%20of%20the%20first%20element%20in%20this%20line%20of%20output.%0A%20%20%20%20%20%20%20%20%20%20%20The%20index%20is%200%20for%20first%20ROW%20lines%20and%20line%20-%20ROW%20for%20remaining%0A%20%20%20%20%20%20%20%20%20%20%20lines%20%20*%2F%0A%20%20%20%20%20%20%20%20int%20start_col%20%3D%20%20max(0%2C%20line-ROW)%3B%0A%20%0A%20%20%20%20%20%20%20%20%2F*%20Get%20count%20of%20elements%20in%20this%20line.%20The%20count%20of%20elements%20is%0A%20%20%20%20%20%20%20%20%20%20%20equal%20to%20minimum%20of%20line%20number%2C%20COL-start_col%20and%20ROW%20*%2F%0A%20%20%20%20%20%20%20%20%20int%20count%20%3D%20min(line%2C%20(COL-start_col)%2C%20ROW)%3B%0A%20%0A%20%20%20%20%20%20%20%20%2F*%20Print%20elements%20of%20this%20line%20*%2F%0A%20%20%20%20%20%20%20%20for%20(int%20j%3D0%3B%20j%3Ccount%3B%20j%2B%2B)%0A%20%20%20%20%20%20%20%20%20%20%20%20printf(%22%255d%20%22%2C%20matrix%5Bmin(ROW%2C%20line)-j-1%5D%5Bstart_col%2Bj%5D)%3B%0A%20%0A%20%20%20%20%20%20%20%20%2F*%20Ptint%20elements%20of%20next%20diagonal%20on%20next%20line%20*%2F%0A%20%20%20%20%20%20%20%20printf(%22%5Cn%22)%3B%0A%20%20%20%20%7D%0A%7D%0A%20%0A%2F%2F%20Utility%20function%20to%20print%20a%20matrix%0Avoid%20printMatrix(int%20matrix%5BROW%5D%5BCOL%5D)%0A%7B%0A%20%20%20%20for%20(int%20i%3D0%3B%20i%3C%20ROW%3B%20i%2B%2B)%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20for%20(int%20j%3D0%3B%20j%3CCOL%3B%20j%2B%2B)%0A%20%20%20%20%20%20%20%20%20%20%20%20printf(%22%255d%20%22%2C%20matrix%5Bi%5D%5Bj%5D)%3B%0A%20%20%20%20%20%20%20%20printf(%22%5Cn%22)%3B%0A%20%20%20%20%7D%0A%7D%0A%20%0A%2F%2F%20Driver%20program%20to%20test%20above%20functions%0Aint%20main()%0A%7B%0A%20%20%20%20int%20M%5BROW%5D%5BCOL%5D%20%3D%20%7B%7B1%2C%202%2C%203%2C%204%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B5%2C%206%2C%207%2C%208%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B9%2C%2010%2C%2011%2C%2012%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B13%2C%2014%2C%2015%2C%2016%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B17%2C%2018%2C%2019%2C%2020%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20printf%20(%22Given%20matrix%20is%20%5Cn%22)%3B%0A%20%20%20%20printMatrix(M)%3B%0A%20%0A%20%20%20%20printf%20(%22%5CnDiagonal%20printing%20of%20matrix%20is%20%5Cn%22)%3B%0A%20%20%20%20diagonalOrder(M)%3B%0A%20%20%20%20return%200%3B%0A%7D%0A” message=”” highlight=”” provider=”manual”/]

Output:

Given matrix is
    1     2     3     4
    5     6     7     8
    9    10    11    12
   13    14    15    16
   17    18    19    20

Diagonal printing of matrix is
    1
    5     2
    9     6     3
   13    10     7     4
   17    14    11     8
   18    15    12
   19    16
   20
[ad type=”banner”]

Categorized in: