Minimum product in a grid of adjacent elements
Last Updated :
23 Mar, 2023
Given an N x M grid. The task is to find the minimum product of four adjacent numbers in the same direction (up, down, left, right, or diagonally) in the matrix.
Examples:
Input : mat[][] = {1, 2, 3, 4,
5, 6, 7, 8,
9, 10, 11, 12}
Output : 700
2*5*7*10 gives output as 700 which is the smallest
product possible
Input : mat[][] = {7, 6, 7, 9
1, 2, 3, 4
1, 2, 3, 6,
5, 6, 7, 1}
Output: 36
Approach: Traverse in the matrix apart from the first row, last row, first column, and last column. Compute the product of the four adjacent numbers, which are mat[i-1][j], mat[i+1][j], mat[i][j+1] and mat[i][j-1]. In each computation, if the product thus formed is less than the previous minimum found, then replace the minimum variable with the computed product.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
const int N = 3;
const int M = 4;
int minimumProduct( int mat[N][M])
{
int minimum = INT_MAX;
for ( int i = 1; i < N - 1; i++) {
for ( int j = 1; j < M - 1; j++) {
int p = mat[i - 1][j] * mat[i + 1][j]
* mat[i][j + 1] * mat[i][j - 1];
if (p < minimum)
minimum = p;
}
}
return minimum;
}
int main()
{
int mat[][4] = { { 1, 2, 3, 4 },
{ 4, 5, 6, 7 },
{ 7, 8, 9, 12 } };
cout << minimumProduct(mat);
return 0;
}
|
Java
import java.io.*;
class GFG
{
static int N = 3 ;
static int M = 4 ;
static int minimumProduct( int mat[][])
{
int minimum = Integer.MAX_VALUE;
for ( int i = 1 ; i < N - 1 ; i++)
{
for ( int j = 1 ; j < M - 1 ; j++)
{
int p = mat[i - 1 ][j] *
mat[i + 1 ][j] *
mat[i][j + 1 ] *
mat[i][j - 1 ];
if (p < minimum)
minimum = p;
}
}
return minimum;
}
public static void main (String[] args)
{
int mat[][] = {{ 1 , 2 , 3 , 4 },
{ 4 , 5 , 6 , 7 },
{ 7 , 8 , 9 , 12 }};
System.out.println(minimumProduct(mat));
}
}
|
Python3
import sys
N = 3
M = 4
def minimumProduct(mat):
minimum = sys.maxsize
for i in range ( 1 , N - 1 , 1 ):
for j in range ( 1 , M - 1 , 1 ):
p = (mat[i - 1 ][j] * mat[i + 1 ][j] *
mat[i][j + 1 ] * mat[i][j - 1 ])
if (p < minimum):
minimum = p
return minimum
if __name__ = = '__main__' :
mat = [[ 1 , 2 , 3 , 4 ],
[ 4 , 5 , 6 , 7 ],
[ 7 , 8 , 9 , 12 ]]
print (minimumProduct(mat))
|
C#
using System;
class GFG
{
static int N = 3;
static int M = 4;
static int minimumProduct( int [,]mat)
{
int minimum = int .MaxValue;
for ( int i = 1;
i < N - 1; i++)
{
for ( int j = 1;
j < M - 1; j++)
{
int p = mat[i - 1, j] *
mat[i + 1, j] *
mat[i, j + 1] *
mat[i, j - 1];
if (p < minimum)
minimum = p;
}
}
return minimum;
}
public static void Main ()
{
int [,]mat = {{1, 2, 3, 4},
{4, 5, 6, 7},
{7, 8, 9, 12}};
Console.WriteLine(minimumProduct(mat));
}
}
|
PHP
<?php
$N = 3;
$M = 4;
function minimumProduct( $mat )
{
global $N ;
global $M ;
$minimum = PHP_INT_MAX;
for ( $i = 1; $i < $N - 1; $i ++)
{
for ( $j = 1; $j < $M - 1; $j ++)
{
$p = $mat [ $i - 1][ $j ] * $mat [ $i + 1][ $j ] *
$mat [ $i ][ $j + 1] * $mat [ $i ][ $j - 1];
if ( $p < $minimum )
$minimum = $p ;
}
}
return $minimum ;
}
$mat = array ( array (1, 2, 3, 4),
array (4, 5, 6, 7),
array (7, 8, 9, 12));
echo minimumProduct( $mat );
?>
|
Javascript
<script>
let N = 3;
let M = 4;
function minimumProduct(mat)
{
let minimum = Number.MAX_VALUE;
for (let i = 1; i < N - 1; i++)
{
for (let j = 1; j < M - 1; j++)
{
let p = mat[i - 1][j] *
mat[i + 1][j] *
mat[i][j + 1] *
mat[i][j - 1];
if (p < minimum)
minimum = p;
}
}
return minimum;
}
let mat = [[1, 2, 3, 4],
[4, 5, 6, 7],
[7, 8, 9, 12]];
document.write(minimumProduct(mat));
</script>
|
Time Complexity: O(N*M), where N and M are the number of rows and columns in the given matrix
Auxiliary Space: O(1)
Share your thoughts in the comments
Please Login to comment...