Program to print the Diagonals of a Matrix
Given a 2D square matrix, print the Principal and Secondary diagonals.
Examples :
Input: 4 1 2 3 4 4 3 2 1 7 8 9 6 6 5 4 3 Output: Principal Diagonal: 1, 3, 9, 3 Secondary Diagonal: 4, 2, 8, 6 Input: 3 1 1 1 1 1 1 1 1 1 Output: Principal Diagonal: 1, 1, 1 Secondary Diagonal: 1, 1, 1
For example, consider the following 4 X 4 input matrix.
A00 A01 A02 A03 A10 A11 A12 A13 A20 A21 A22 A23 A30 A31 A32 A33
- The primary diagonal is formed by the elements A00, A11, A22, A33.
Condition for Principal Diagonal:
The row-column condition is row = column.
- The secondary diagonal is formed by the elements A03, A12, A21, A30.
Condition for Secondary Diagonal:
The row-column condition is row = numberOfRows - column -1.
Method 1:
In this method, we use two loops i.e. a loop for columns and a loop for rows and in the inner loop we check for the condition stated above.
C++
// C++ Program to print the Diagonals of a Matrix #include <bits/stdc++.h> using namespace std; const int MAX = 100; // Function to print the Principal Diagonal void printPrincipalDiagonal( int mat[][MAX], int n) { cout << "Principal Diagonal: " ; for ( int i = 0; i < n; i++) { for ( int j = 0; j < n; j++) { // Condition for principal diagonal if (i == j) cout << mat[i][j] << ", " ; } } cout << endl; } // Function to print the Secondary Diagonal void printSecondaryDiagonal( int mat[][MAX], int n) { cout << "Secondary Diagonal: " ; for ( int i = 0; i < n; i++) { for ( int j = 0; j < n; j++) { // Condition for secondary diagonal if ((i + j) == (n - 1)) cout << mat[i][j] << ", " ; } } cout << endl; } // Driver code int main() { int n = 4; int a[][MAX] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 1, 2, 3, 4 }, { 5, 6, 7, 8 } }; printPrincipalDiagonal(a, n); printSecondaryDiagonal(a, n); return 0; } |
Java
// Java Program to print the Diagonals of a Matrix class GFG { static int MAX = 100 ; // Function to print the Principal Diagonal static void printPrincipalDiagonal( int mat[][], int n) { System.out.print( "Principal Diagonal: " ); for ( int i = 0 ; i < n; i++) { for ( int j = 0 ; j < n; j++) { // Condition for principal diagonal if (i == j) { System.out.print(mat[i][j] + ", " ); } } } System.out.println( "" ); } // Function to print the Secondary Diagonal static void printSecondaryDiagonal( int mat[][], int n) { System.out.print( "Secondary Diagonal: " ); for ( int i = 0 ; i < n; i++) { for ( int j = 0 ; j < n; j++) { // Condition for secondary diagonal if ((i + j) == (n - 1 )) { System.out.print(mat[i][j] + ", " ); } } } System.out.println( "" ); } // Driver code public static void main(String args[]) { int n = 4 ; int a[][] = { { 1 , 2 , 3 , 4 }, { 5 , 6 , 7 , 8 }, { 1 , 2 , 3 , 4 }, { 5 , 6 , 7 , 8 } }; printPrincipalDiagonal(a, n); printSecondaryDiagonal(a, n); } } // This code is contributed by Rajput-Ji |
Python3
# Python3 Program to print the Diagonals of a Matrix MAX = 100 # Function to print the Principal Diagonal def printPrincipalDiagonal(mat, n): print ( "Principal Diagonal: " , end = "") for i in range (n): for j in range (n): # Condition for principal diagonal if (i = = j): print (mat[i][j], end = ", " ) print () # Function to print the Secondary Diagonal def printSecondaryDiagonal(mat, n): print ( "Secondary Diagonal: " , end = "") for i in range (n): for j in range (n): # Condition for secondary diagonal if ((i + j) = = (n - 1 )): print (mat[i][j], end = ", " ) print () # Driver code n = 4 a = [[ 1 , 2 , 3 , 4 ], [ 5 , 6 , 7 , 8 ], [ 1 , 2 , 3 , 4 ], [ 5 , 6 , 7 , 8 ]] printPrincipalDiagonal(a, n) printSecondaryDiagonal(a, n) # This code is contributed by Mohit Kumar |
C#
// C# Program to print the Diagonals of a Matrix using System; class GFG { static int MAX = 100; // Function to print the Principal Diagonal static void printPrincipalDiagonal( int [, ] mat, int n) { Console.Write( "Principal Diagonal: " ); for ( int i = 0; i < n; i++) { for ( int j = 0; j < n; j++) { // Condition for principal diagonal if (i == j) { Console.Write(mat[i, j] + ", " ); } } } Console.WriteLine( "" ); } // Function to print the Secondary Diagonal static void printSecondaryDiagonal( int [, ] mat, int n) { Console.Write( "Secondary Diagonal: " ); for ( int i = 0; i < n; i++) { for ( int j = 0; j < n; j++) { // Condition for secondary diagonal if ((i + j) == (n - 1)) { Console.Write(mat[i, j] + ", " ); } } } Console.WriteLine( "" ); } // Driver code public static void Main(String[] args) { int n = 4; int [, ] a = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 1, 2, 3, 4 }, { 5, 6, 7, 8 } }; printPrincipalDiagonal(a, n); printSecondaryDiagonal(a, n); } } // This code is contributed by 29AjayKumar |
Javascript
<script> // Javascript Program to print the Diagonals of a Matrix let MAX = 100; // Function to print the Principal Diagonal function printPrincipalDiagonal(mat, n) { document.write( "Principal Diagonal: " ); for (let i = 0; i < n; i++) { for (let j = 0; j < n; j++) { // Condition for principal diagonal if (i == j) { document.write(mat[i][j] + ", " ); } } } document.write( "</br>" ); } // Function to print the Secondary Diagonal function printSecondaryDiagonal(mat, n) { document.write( "Secondary Diagonal: " ); for (let i = 0; i < n; i++) { for (let j = 0; j < n; j++) { // Condition for secondary diagonal if ((i + j) == (n - 1)) { document.write(mat[i][j] + ", " ); } } } document.write( "</br>" ); } let n = 4; let a = [ [ 1, 2, 3, 4 ], [ 5, 6, 7, 8 ], [ 1, 2, 3, 4 ], [ 5, 6, 7, 8 ] ]; printPrincipalDiagonal(a, n); printSecondaryDiagonal(a, n); </script> |
Output:
Principal Diagonal: 1, 6, 3, 8, Secondary Diagonal: 4, 7, 2, 5,
Complexity Analysis:
- Time Complexity: O(n2).
As there is a nested loop involved so the time complexity is squared. - Auxiliary Space: O(1).
As no extra space is occupied.
Method 2:
In this method, the same condition for printing the diagonal elements can be achieved using a single for loop.
Approach:
- For Principal Diagonal elements: Run a for a loop until n, where n is the number of columns, and print array[i][i] where i is the index variable.
- For Secondary Diagonal elements: Run a for a loop until n, where n is the number of columns and print array[i][k] where i is the index variable and k = array_length – 1. Decrease k until i < n.
Below is the implementation of the above approach.
C++
// C++ Program to print the Diagonals of a Matrix #include <bits/stdc++.h> using namespace std; const int MAX = 100; // Function to print the Principal Diagonal void printPrincipalDiagonal( int mat[][MAX], int n) { cout << "Principal Diagonal: " ; for ( int i = 0; i < n; i++) { // Printing principal diagonal cout << mat[i][i] << ", " ; } cout << endl; } // Function to print the Secondary Diagonal void printSecondaryDiagonal( int mat[][MAX], int n) { cout << "Secondary Diagonal: " ; int k = n - 1; for ( int i = 0; i < n; i++) { // Printing secondary diagonal cout << mat[i][k--] << ", " ; } cout << endl; } // Driver code int main() { int n = 4; int a[][MAX] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 1, 2, 3, 4 }, { 5, 6, 7, 8 } }; printPrincipalDiagonal(a, n); printSecondaryDiagonal(a, n); return 0; } // This code is contributed by yashbeersingh42 |
Java
// Java Program to print the // Diagonals of a Matrix class Main{ static int MAX = 100 ; // Function to print the Principal Diagonal public static void printPrincipalDiagonal( int mat[][], int n) { System.out.print( "Principal Diagonal: " ); for ( int i = 0 ; i < n; i++) { // Printing principal diagonal System.out.print(mat[i][i] + ", " ); } System.out.println(); } // Function to print the Secondary Diagonal public static void printSecondaryDiagonal( int mat[][], int n) { System.out.print( "Secondary Diagonal: " ); int k = n - 1 ; for ( int i = 0 ; i < n; i++) { // Printing secondary diagonal System.out.print(mat[i][k--] + ", " ); } System.out.println(); } public static void main(String[] args) { int n = 4 ; int a[][] = {{ 1 , 2 , 3 , 4 }, { 5 , 6 , 7 , 8 }, { 1 , 2 , 3 , 4 }, { 5 , 6 , 7 , 8 }}; printPrincipalDiagonal(a, n); printSecondaryDiagonal(a, n); } } // This code is contributed by divyeshrabadiya07 |
Python3
# Python3 program to print the # Diagonals of a Matrix MAX = 100 # Function to print the Principal Diagonal def printPrincipalDiagonal(mat, n): print ( "Principal Diagonal: " , end = "") for i in range (n): # Printing principal diagonal print (mat[i][i], end = ", " ) print () # Function to print the Secondary Diagonal def printSecondaryDiagonal(mat, n): print ( "Secondary Diagonal: " , end = "") k = n - 1 for i in range (n): # Printing secondary diagonal print (mat[i][k], end = ", " ) k - = 1 print () # Driver Code n = 4 a = [ [ 1 , 2 , 3 , 4 ], [ 5 , 6 , 7 , 8 ], [ 1 , 2 , 3 , 4 ], [ 5 , 6 , 7 , 8 ] ] printPrincipalDiagonal(a, n) printSecondaryDiagonal(a, n) # This code is contributed by divyesh072019 |
C#
// C# program for the // above approach using System; class GFG{ // Function to print the // Principal Diagonal static void printPrincipalDiagonal( int [,]mat, int n) { Console.Write( "Principal Diagonal: " ); for ( int i = 0; i < n; i++) { // Printing principal diagonal Console.Write(mat[i, i] + ", " ); } Console.Write( "\n" ); } // Function to print the // Secondary Diagonal static void printSecondaryDiagonal( int [,]mat, int n) { Console.Write( "Secondary Diagonal: " ); int k = n - 1; for ( int i = 0; i < n; i++) { // Printing secondary diagonal Console.Write(mat[i, k--] + ", " ); } Console.Write( "\n" ); } // Driver code static void Main() { int n = 4; int [,]a = {{1, 2, 3, 4}, {5, 6, 7, 8}, {1, 2, 3, 4}, {5, 6, 7, 8}}; printPrincipalDiagonal(a, n); printSecondaryDiagonal(a, n); } } // This code is contributed by rutvik_56 |
Javascript
<script> // Javascript Program to print the // Diagonals of a Matrix let MAX = 100; // Function to print the Principal Diagonal function printPrincipalDiagonal(mat, n) { document.write( "Principal Diagonal: " ); for (let i = 0; i < n; i++) { // Printing principal diagonal document.write(mat[i][i] + ", " ); } document.write( "</br>" ); } // Function to print the Secondary Diagonal function printSecondaryDiagonal(mat, n) { document.write( "Secondary Diagonal: " ); let k = n - 1; for (let i = 0; i < n; i++) { // Printing secondary diagonal document.write(mat[i][k--] + ", " ); } document.write( "</br>" ); } let n = 4; let a = [[1, 2, 3, 4], [5, 6, 7, 8], [1, 2, 3, 4], [5, 6, 7, 8]]; printPrincipalDiagonal(a, n); printSecondaryDiagonal(a, n); </script> |
Output:
Principal Diagonal: 1, 6, 3, 8, Secondary Diagonal: 4, 7, 2, 5,
Complexity Analysis:
- Time Complexity: O(n).
As there is only one loop involved so the time complexity is linear. - Auxiliary Space: O(1).
As no extra space is occupied.
Please Login to comment...