C++ Program to Efficiently Compute Sums of Diagonals of a Matrix
Last Updated :
17 Jan, 2023
Given a 2D square matrix, find the sum of elements in Principal and Secondary diagonals. 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.
Examples :
Input:
4
1 2 3 4
4 3 2 1
7 8 9 6
6 5 4 3
Output:
Principal Diagonal: 16
Secondary Diagonal: 20
Input:
3
1 1 1
1 1 1
1 1 1
Output:
Principal Diagonal: 3
Secondary Diagonal: 3
Method 1 (Brute Force) :
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++
// A simple C++ program to find sum
// of diagonals
#include <bits/stdc++.h>
using namespace std;
const int MAX = 100;
void printDiagonalSums(int mat[][MAX], int n)
{
int principal = 0, secondary = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
// Condition for principal diagonal
if (i == j)
principal += mat[i][j];
// Condition for secondary diagonal
if ((i + j) == (n - 1))
secondary += mat[i][j];
}
}
cout << "Principal Diagonal:" <<
principal << endl;
cout << "Secondary Diagonal:" <<
secondary << endl;
}
// Driver code
int main()
{
int a[][MAX] = {{1, 2, 3, 4},
{5, 6, 7, 8},
{1, 2, 3, 4},
{5, 6, 7, 8}};
printDiagonalSums(a, 4);
return 0;
}
Output:
Principal Diagonal:18
Secondary Diagonal:18
Time Complexity: O(N*N), as we are using nested loops to traverse N*N times.
Auxiliary Space: O(1), as we are not using any extra space.
Method 2 (Efficient Approach) :
In this method we use one loop i.e. a loop for calculating sum of both the principal and secondary diagonals:
C++
// An efficient C++ program to
// find sum of diagonals
#include <bits/stdc++.h>
using namespace std;
const int MAX = 100;
void printDiagonalSums(int mat[][MAX],
int n)
{
int principal = 0, secondary = 0;
for (int i = 0; i < n; i++)
{
principal += mat[i][i];
secondary += mat[i][n - i - 1];
}
cout << "Principal Diagonal:" <<
principal << endl;
cout << "Secondary Diagonal:" <<
secondary << endl;
}
// Driver code
int main()
{
int a[][MAX] = {{1, 2, 3, 4},
{5, 6, 7, 8},
{1, 2, 3, 4},
{5, 6, 7, 8}};
printDiagonalSums(a, 4);
return 0;
}
Output :
Principal Diagonal:18
Secondary Diagonal:18
Time Complexity: O(N), as we are using a loop to traverse N times.
Auxiliary Space: O(1), as we are not using any extra space.
Please refer complete article on Efficiently compute sums of diagonals of a matrix for more details!
Similar Reads
C++ Program to Find difference between sums of two diagonals Given a matrix of n X n. The task is to calculate the absolute difference between the sums of its diagonal.Examples: Input : mat[][] = 11 2 4 4 5 6 10 8 -12 Output : 15 Sum of primary diagonal = 11 + 5 + (-12) = 4. Sum of primary diagonal = 4 + 5 + 10 = 19. Difference = |19 - 4| = 15. Input : mat[][
3 min read
C++ Program to Generate a matrix having sum of secondary diagonal equal to a perfect square Given an integer N, the task is to generate a matrix of dimensions N x N using positive integers from the range [1, N] such that the sum of the secondary diagonal is a perfect square. Examples: Input: N = 3Output:1 2 32 3 13 2 1Explanation:The sum of secondary diagonal = 3 + 3 + 3 = 9(= 32). Input:
3 min read
C++ Program to Maximize sum of diagonal of a matrix by rotating all rows or all columns Given a square matrix, mat[][] of dimensions N * N, the task is find the maximum sum of diagonal elements possible from the given matrix by rotating either all the rows or all the columns of the matrix by a positive integer. Examples: Input: mat[][] = { { 1, 1, 2 }, { 2, 1, 2 }, { 1, 2, 2 } }Output:
3 min read
C++ Program For Determinant of a Matrix What is the Determinant of a Matrix? The determinant of a Matrix is a special number that is defined only for square matrices (matrices that have the same number of rows and columns). A determinant is used at many places in calculus and other matrices related to algebra, it actually represents the m
12 min read
C++ Program for Diagonally Dominant Matrix In mathematics, a square matrix is said to be diagonally dominant if, for every row of the matrix, the magnitude of the diagonal entry in a row is larger than or equal to the sum of the magnitudes of all the other (non-diagonal) entries in that row. More precisely, the matrix A is diagonally dominan
3 min read