 Open in App
Not now

# Python3 Program to Maximize sum of diagonal of a matrix by rotating all rows or all columns

• Last Updated : 27 Jan, 2022

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:
Explanation:
Rotating all the columns of matrix by 1 modifies mat[][] to { {2, 1, 2}, {1, 2, 2}, {1, 1, 2} }.
Therefore, the sum of diagonal elements of the matrix = 2 + 2 + 2 = 6 which is the maximum possible.

Input: A[][] = { { -1, 2 }, { -1, 3 } }
Output: 2

Approach: The idea is to rotate all the rows and columns of the matrix in all possible ways and calculate the maximum sum obtained. Follow the steps to solve the problem:

• Initialize a variable, say maxDiagonalSum to store the maximum possible sum of diagonal elements the matrix by rotating all the rows or columns of the matrix.
• Rotate all the rows of the matrix by a positive integer in the range [0, N – 1] and update the value of maxDiagonalSum.
• Rotate all the columns of the matrix by a positive integer in the range [0, N – 1] and update the value of maxDiagonalSum.
• Finally, print the value of maxDiagonalSum.

Below is the implementation of the above approach:

## Python3

 `# Python3 program to implement ` `# the above approach ` `import` `sys ` ` `  `N ``=` `3` ` `  `# Function to find maximum sum of diagonal ` `# elements of matrix by rotating either  ` `# rows or columns ` `def` `findMaximumDiagonalSumOMatrixf(A): ` `     `  `    ``# Stores maximum diagonal sum of elements ` `    ``# of matrix by rotating rows or columns ` `    ``maxDiagonalSum ``=` `-``sys.maxsize ``-` `1` ` `  `    ``# Rotate all the columns by an integer ` `    ``# in the range [0, N - 1] ` `    ``for` `i ``in` `range``(N):       ` ` `  `        ``# Stores sum of diagonal elements ` `        ``# of the matrix ` `        ``curr ``=` `0` `         `  `        ``# Calculate sum of diagonal  ` `        ``# elements of the matrix ` `        ``for` `j ``in` `range``(N): ` `             `  `            ``# Update curr ` `            ``curr ``+``=` `A[j][(i ``+` `j) ``%` `N] ` `        `  `        ``# Update maxDiagonalSum ` `        ``maxDiagonalSum ``=` `max``(maxDiagonalSum,  ` `                             ``curr) ` `                              `  `    ``# Rotate all the rows by an integer ` `    ``# in the range [0, N - 1] ` `    ``for` `i ``in` `range``(N): ` `         `  `        ``# Stores sum of diagonal elements ` `        ``# of the matrix ` `        ``curr ``=` `0` `         `  `        ``# Calculate sum of diagonal  ` `        ``# elements of the matrix ` `        ``for` `j ``in` `range``(N):           ` `             `  `            ``# Update curr ` `            ``curr ``+``=` `A[(i ``+` `j) ``%` `N][j] ` `         `  `        ``# Update maxDiagonalSum ` `        ``maxDiagonalSum ``=` `max``(maxDiagonalSum,  ` `                             ``curr) ` `                              `  `    ``return` `maxDiagonalSum ` ` `  `# Driver code ` `if` `__name__ ``=``=` `"__main__"``: ` `     `  `    ``mat ``=` `[ [ ``1``, ``1``, ``2` `],  ` `            ``[ ``2``, ``1``, ``2` `],  ` `            ``[ ``1``, ``2``, ``2` `] ] ` `     `  `    ``print``(findMaximumDiagonalSumOMatrixf(mat)) ` `     `  `# This code is contributed by chitranayal`

Output:

`6`

Time Complexity: O(N2)
Auxiliary Space: O(1)

Please refer complete article on Maximize sum of diagonal of a matrix by rotating all rows or all columns for more details!

My Personal Notes arrow_drop_up
Related Articles