-
Notifications
You must be signed in to change notification settings - Fork 22
/
ZigZag.cpp
73 lines (62 loc) · 1.6 KB
/
ZigZag.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <stdio.h>
#include <stdlib.h>
#define ROW 5
#define COL 4
// A utility function to find min of two integers
int minu(int a, int b)
{ return (a < b)? a: b; }
// A utility function to find min of three integers
int min(int a, int b, int c)
{ return minu(minu(a, b), c);}
// A utility function to find max of two integers
int max(int a, int b)
{ return (a > b)? a: b; }
// The main function that prints given matrix in
// diagonal order
void diagonalOrder(int matrix[][COL])
{
// There will be ROW+COL-1 lines in the output
for (int line=1; line<=(ROW + COL -1); line++)
{
/* Get column index of the first element
in this line of output.
The index is 0 for first ROW lines and
line - ROW for remaining lines */
int start_col = max(0, line-ROW);
/* Get count of elements in this line. The
count of elements is equal to minimum of
line number, COL-start_col and ROW */
int count = min(line, (COL-start_col), ROW);
/* Print elements of this line */
for (int j=0; j<count; j++)
printf("%5d ",
matrix[minu(ROW, line)-j-1][start_col+j]);
/* Print elements of next diagonal on next line */
printf("\n");
}
}
// Utility function to print a matrix
void printMatrix(int matrix[ROW][COL])
{
for (int i=0; i< ROW; i++)
{
for (int j=0; j<COL; j++)
printf("%5d ", matrix[i][j]);
printf("\n");
}
}
// Driver code
int main()
{
int M[ROW][COL] = {{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16},
{17, 18, 19, 20},
};
printf ("Given matrix is \n");
printMatrix(M);
printf ("\nDiagonal printing of matrix is \n");
diagonalOrder(M);
return 0;
}