# Print Matrix Diagonally OR Diagonal order of Matrix.

### Print Matrix Diagonally. ORLoop diagonally through two dimensional array. ORTraverse an array diagonally. ORPrint elements of Matrix in Diagonal order.

Given a Matrix / 2D array, Print all elements of Matrix in Diagonal order. Lets understand Diagonal order of Matrix graphically.

### Algorithm

Lets see algorithm for printing Matrix diagonally.

If we observe the Matrix, there are 2 set of Diagonals,
1. rowCount diagonals
2. (colCount - 1) diagonals.

We will first print the rowCount diagonals and then print the remaining columnCount-1 diagonals.

For  printing rowCount diagonals:
1. Iterate "r" from 0 till rowCount
2. For each row, initialize "row=r" and "col=0" iterate till (row >=0 && col<collength )
3. Print matrix[row][col]
4. Decrement row-- and Increment col++

For  printing (colCount-1) diagonals:
1. Iterate "c" from 1 till colCount
2. For each row, initialize "row=rowCount" and "col=c" iterate till (row >=0 && col < collength)
3. Print matrix[row][col]
4. Decrement row-- and Increment col++

### Java Program to Print Matrix Diagonally.

```package matrix;

/*
Input:
{1,  2,  3,  4},
{5,  6,  7,  8},
{9,  10, 11, 12},
{13, 14, 15, 16},
{17, 18, 19, 20},

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

public class PrintMatrixDiagonally {

public static void main(String[] args) {
new PrintMatrixDiagonally();
}

public PrintMatrixDiagonally() {
int[][] matrix = {
{1,  2,  3,  4},
{5,  6,  7,  8},
{9,  10, 11, 12},
{13, 14, 15, 16},
{17, 18, 19, 20}
};

printMatrixDiagonally(matrix);
}

private void printMatrixDiagonally(int[][] matrix){

int rowCount = matrix.length;
int columnCount = matrix[0].length;

for (int r = 0; r < rowCount; r++) {
for (int row = r, col = 0; row >= 0 && col < columnCount; row--, col++) {
System.out.print(matrix[row][col] + " ");
}
System.out.println();
}

for (int c = 1; c < columnCount; c++) {
for (int row = rowCount-1, col = c; row >= 0 && col < columnCount; row--, col++) {
System.out.print(matrix[row][col] + " ");
}
System.out.println();
}

}

}

```