Find Maximum side length of square in a Matrix
Last Updated :
03 Oct, 2022
Given a square matrix of odd order N. The task is to find the side-length of the largest square formed in the matrix. A square in matrix is said to be formed if all elements on its perimeter is same and its centre is centre of matrix. Centre of matrix is also a square with side length 1.
Examples:
Input : matrix[][] = {2, 3, 0,
0, 2, 0,
0, 1, 1}
Output : 1
Input : matrix[][] = {2, 2, 2,
2, 1, 2,
2, 2, 2}
Output : 3
The centre of any odd order matrix is element with index i = j = n/2. Now, for finding largest square in matrix, check all surrounding elements from centre which are at same distance. For a square which is i-unit away from centre check all the element which are in the n/2-i and n/2+i row and column also difference of n/2 and either of index of element does-not exceed i. Please find the format of a square with different possible side length in below example.
x x x x x
x y y y x
x y c y x
x y y y x
x x x x x
Points to care about :
- As centre element is also a form of square minimum possible side length is 1.
- Longest square can be with all elements present in 1st row and 1 column, hence maximum possible side-length is n
Algorithm :
- Iterate over i=0 to n/2
- iterate over column i to n-i-1 for row i and n-i-1 both
and vice-versa and check whether all elements are same or not. - If yes then length of square is n-2*i.
- Else go for next iteration
Below is the implementation of the above approach:
C++
// C++ program to find max possible side-length
// of a square in a given matrix
#include <bits/stdc++.h>
#define n 5
using namespace std;
// Function to return side-length of square
int largestSideLen(int matrix[][n])
{
int result = 1;
// Traverse the matrix
for (int i = 0; i < n / 2; i++) {
int element = matrix[i][i];
int isSquare = 1;
for (int j = i; j < n - i; j++) {
// for row i
if (matrix[i][j] != element)
isSquare = 0;
// for row n-i-1
if (matrix[n - i - 1][j] != element)
isSquare = 0;
// for column i
if (matrix[j][i] != element)
isSquare = 0;
// for column n-i-1
if (matrix[j][n - i - 1] != element)
isSquare = 0;
}
if (isSquare)
return n - 2 * i;
}
// Return result
return result;
}
// Driver program
int main()
{
int matrix[n][n] = { 1, 1, 1, 1, 1,
1, 2, 2, 2, 1,
1, 2, 1, 2, 1,
1, 2, 2, 2, 1,
1, 1, 1, 1, 1 };
cout << largestSideLen(matrix);
return 0;
}
Java
// Java program to find max possible side-length
// of a square in a given matrix
import java.io.*;
class GFG {
static int n = 5;
// Function to return side-length of square
static int largestSideLen(int matrix[][])
{
int result = 1;
// Traverse the matrix
for (int i = 0; i < (n / 2); i++) {
int element = matrix[i][i];
int isSquare = 1;
for (int j = i; j < n - i; j++) {
// for row i
if (matrix[i][j] != element)
isSquare = 0;
// for row n-i-1
if (matrix[n - i - 1][j] != element)
isSquare = 0;
// for column i
if (matrix[j][i] != element)
isSquare = 0;
// for column n-i-1
if (matrix[j][n - i - 1] != element)
isSquare = 0;
}
if (isSquare > 0)
return n - (2 * i);
}
// Return result
return result;
}
// Driver program
public static void main (String[] args) {
int matrix[][] = {{ 1, 1, 1, 1, 1},
{1, 2, 2, 2, 1},
{1, 2, 1, 2, 1},
{1, 2, 2, 2, 1},
{1, 1, 1, 1, 1 }};
System.out.println (largestSideLen(matrix));
}
}
Python3
# Python 3 program to find max possible
# side-length of a square in a given matrix
n = 5
# Function to return side-length of square
def largestSideLen(matrix):
result = 1
# Traverse the matrix
for i in range(int(n / 2)):
element = matrix[i][i]
isSquare = 1
for j in range(i, n - i):
# for row i
if (matrix[i][j] != element):
isSquare = 0
# for row n-i-1
if (matrix[n - i - 1][j] != element):
isSquare = 0
# for column i
if (matrix[j][i] != element):
isSquare = 0
# for column n-i-1
if (matrix[j][n - i - 1] != element):
isSquare = 0
if (isSquare):
return n - 2 * i
# Return result
return result
# Driver Code
if __name__ == '__main__':
matrix = [[1, 1, 1, 1, 1],
[1, 2, 2, 2, 1],
[1, 2, 1, 2, 1],
[1, 2, 2, 2, 1],
[1, 1, 1, 1, 1]]
print(largestSideLen(matrix))
# This code is contributed by
# Surendra_Gangwar
C#
// C# program to find max possible side-length
// of a square in a given matrix
using System;
public class GFG{
static int n = 5;
// Function to return side-length of square
static int largestSideLen(int [,]matrix)
{
int result = 1;
// Traverse the matrix
for (int i = 0; i < (n / 2); i++) {
int element = matrix[i,i];
int isSquare = 1;
for (int j = i; j < n - i; j++) {
// for row i
if (matrix[i,j] != element)
isSquare = 0;
// for row n-i-1
if (matrix[n - i - 1,j] != element)
isSquare = 0;
// for column i
if (matrix[j,i] != element)
isSquare = 0;
// for column n-i-1
if (matrix[j,n - i - 1] != element)
isSquare = 0;
}
if (isSquare > 0)
return n - (2 * i);
}
// Return result
return result;
}
// Driver program
static public void Main (){
int [,]matrix = {{ 1, 1, 1, 1, 1},
{1, 2, 2, 2, 1},
{1, 2, 1, 2, 1},
{1, 2, 2, 2, 1},
{1, 1, 1, 1, 1 }};
Console.WriteLine(largestSideLen(matrix));
}
}
PHP
<?php
// PHP program to find max possible
// side-length of a square in a given matrix
// Function to return side-length of square
function largestSideLen($matrix)
{
$n = 5;
$result = 1;
// Traverse the matrix
for ($i = 0; $i < ($n / 2); $i++)
{
$element = $matrix[$i][$i];
$isSquare = 1;
for ($j = $i; $j < ($n - $i); $j++)
{
// for row i
if ($matrix[$i][$j] != $element)
$isSquare = 0;
// for row n-i-1
if ($matrix[$n - $i - 1][$j] != $element)
$isSquare = 0;
// for column i
if ($matrix[$j][$i] != $element)
$isSquare = 0;
// for column n-i-1
if ($matrix[$j][$n - $i - 1] != $element)
$isSquare = 0;
}
if ($isSquare)
return ($n - 2 * $i);
}
// Return result
return $result;
}
// Driver Code
$matrix = array( 1, 1, 1, 1, 1,
1, 2, 2, 2, 1,
1, 2, 1, 2, 1,
1, 2, 2, 2, 1,
1, 1, 1, 1, 1 );
echo largestSideLen($matrix);
// This code is contributed by Sachin
?>
JavaScript
<script>
// Javascript program to find max
// possible side-length
// of a square in a given matrix
const n = 5;
// Function to return
// side-length of square
function largestSideLen(matrix)
{
let result = 1;
// Traverse the matrix
for (let i = 0; i < parseInt(n / 2); i++)
{
let element = matrix[i][i];
let isSquare = 1;
for (let j = i; j < n - i; j++) {
// for row i
if (matrix[i][j] != element)
isSquare = 0;
// for row n-i-1
if (matrix[n - i - 1][j] != element)
isSquare = 0;
// for column i
if (matrix[j][i] != element)
isSquare = 0;
// for column n-i-1
if (matrix[j][n - i - 1] != element)
isSquare = 0;
}
if (isSquare)
return n - 2 * i;
}
// Return result
return result;
}
// Driver program
let matrix = [ [1, 1, 1, 1, 1],
[1, 2, 2, 2, 1],
[1, 2, 1, 2, 1],
[1, 2, 2, 2, 1],
[1, 1, 1, 1, 1 ]];
document.write(largestSideLen(matrix));
</script>
Similar Reads
Maximum size square sub-matrix with all 1s Given a binary matrix mat of size n * m, the task is to find out the maximum length of a side of a square sub-matrix with all 1s.Example:Input: mat = [ [0, 1, 1, 0, 1], [1, 1, 0, 1, 0], [0, 1, 1, 1, 0], [1, 1, 1, 1, 0], [1, 1, 1, 1, 1], [0, 0, 0, 0, 0] ]Output: 3Explanation: The maximum length of a
15+ min read
Squares of Matrix Diagonal Elements Given an integer matrix mat[][] of odd dimensions, the task is to find the square of the elements of the Primary and Secondary diagonals.The Primary and Secondary diagonal matrix explanation is given below:Primary Diagonal Elements of a Matrix: The Primary Diagonal Elements are the ones that occur f
11 min read
Find the mean vector of a Matrix Given a matrix of size M x N, the task is to find the Mean Vector of the given matrix. Examples: Input : mat[][] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}} Output : Mean Vector is [4 5 6] Mean of column 1 is (1 + 4 + 7) / 3 = 4 Mean of column 2 is (2 + 5 + 8) / 3 = 5 Mean of column 3 is (3 + 6 + 9) / 3 = 6
6 min read
Find Maximum Length Of A Square Submatrix Having Sum Of Elements At-Most K Given a N x M matrix where N is the number of rows and M is the number of columns in the given matrix and an integer K. The task is to find the maximum length of a square submatrix having the sum of elements less than or equal to K or print 0 if no such square exits.Examples: Input: r = 4, c = 4 , k
8 min read
Find Maximum Length Of A Square Submatrix Having Sum Of Elements At-Most K Given a N x M matrix where N is the number of rows and M is the number of columns in the given matrix and an integer K. The task is to find the maximum length of a square submatrix having the sum of elements less than or equal to K or print 0 if no such square exits.Examples: Input: r = 4, c = 4 , k
8 min read
Find Maximum Length Of A Square Submatrix Having Sum Of Elements At-Most K Given a N x M matrix where N is the number of rows and M is the number of columns in the given matrix and an integer K. The task is to find the maximum length of a square submatrix having the sum of elements less than or equal to K or print 0 if no such square exits.Examples: Input: r = 4, c = 4 , k
8 min read