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++ program to find the minimum product // of adjacent elements #include <bits/stdc++.h> using namespace std;
const int N = 3;
const int M = 4;
// Function to return the minimum // product of adjacent elements int minimumProduct( int mat[N][M])
{ // initial minimum
int minimum = INT_MAX;
// Traverse in the matrix
// except the first, last row
// first and last column
for ( int i = 1; i < N - 1; i++) {
for ( int j = 1; j < M - 1; j++) {
// product the adjacent elements
int p = mat[i - 1][j] * mat[i + 1][j]
* mat[i][j + 1] * mat[i][j - 1];
// if the product is less than
// the previously computed minimum
if (p < minimum)
minimum = p;
}
}
return minimum;
} // Driver Code int main()
{ int mat[][4] = { { 1, 2, 3, 4 },
{ 4, 5, 6, 7 },
{ 7, 8, 9, 12 } };
cout << minimumProduct(mat);
return 0;
} |
// Java program to find // the minimum product // of adjacent elements import java.io.*;
class GFG
{ static int N = 3 ;
static int M = 4 ;
// Function to return the // minimum product of // adjacent elements static int minimumProduct( int mat[][])
{ // initial minimum
int minimum = Integer.MAX_VALUE;
// Traverse in the matrix
// except the first, last row
// first and last column
for ( int i = 1 ; i < N - 1 ; i++)
{
for ( int j = 1 ; j < M - 1 ; j++)
{
// product the
// adjacent elements
int p = mat[i - 1 ][j] *
mat[i + 1 ][j] *
mat[i][j + 1 ] *
mat[i][j - 1 ];
// if the product is less
// than the previously
// computed minimum
if (p < minimum)
minimum = p;
}
}
return minimum;
} // Driver Code 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));
} } // This code is contributed // by anuj_67. |
# Python 3 program to find the minimum # product of adjacent elements import sys
N = 3
M = 4
# Function to return the minimum # product of adjacent elements def minimumProduct(mat):
# initial minimum
minimum = sys.maxsize
# Traverse in the matrix except
# the first, last row first
# and last column
for i in range ( 1 , N - 1 , 1 ):
for j in range ( 1 , M - 1 , 1 ):
# product the adjacent elements
p = (mat[i - 1 ][j] * mat[i + 1 ][j] *
mat[i][j + 1 ] * mat[i][j - 1 ])
# if the product is less than
# the previously computed minimum
if (p < minimum):
minimum = p
return minimum
# Driver Code if __name__ = = '__main__' :
mat = [[ 1 , 2 , 3 , 4 ],
[ 4 , 5 , 6 , 7 ],
[ 7 , 8 , 9 , 12 ]]
print (minimumProduct(mat))
# This code is contributed by # Shashank_Sharma |
// C# program to find // the minimum product // of adjacent elements using System;
class GFG
{ static int N = 3;
static int M = 4;
// Function to return the // minimum product of // adjacent elements static int minimumProduct( int [,]mat)
{ // initial minimum
int minimum = int .MaxValue;
// Traverse in the matrix
// except the first, last row
// first and last column
for ( int i = 1;
i < N - 1; i++)
{
for ( int j = 1;
j < M - 1; j++)
{
// product the
// adjacent elements
int p = mat[i - 1, j] *
mat[i + 1, j] *
mat[i, j + 1] *
mat[i, j - 1];
// if the product is less
// than the previously
// computed minimum
if (p < minimum)
minimum = p;
}
}
return minimum;
} // Driver Code public static void Main ()
{ int [,]mat = {{1, 2, 3, 4},
{4, 5, 6, 7},
{7, 8, 9, 12}};
Console.WriteLine(minimumProduct(mat));
} } // This code is contributed // by anuj_67. |
<?php // PHP program to find the minimum // product of adjacent elements $N = 3;
$M = 4;
// Function to return the minimum // product of adjacent elements function minimumProduct( $mat )
{ global $N ;
global $M ;
// initial minimum
$minimum = PHP_INT_MAX;
// Traverse in the matrix
// except the first, last row
// first and last column
for ( $i = 1; $i < $N - 1; $i ++)
{
for ( $j = 1; $j < $M - 1; $j ++)
{
// product the adjacent elements
$p = $mat [ $i - 1][ $j ] * $mat [ $i + 1][ $j ] *
$mat [ $i ][ $j + 1] * $mat [ $i ][ $j - 1];
// if the product is less than the
// previously computed minimum
if ( $p < $minimum )
$minimum = $p ;
}
}
return $minimum ;
} // Driver Code $mat = array ( array (1, 2, 3, 4),
array (4, 5, 6, 7),
array (7, 8, 9, 12));
echo minimumProduct( $mat );
// This code is contributed by Sach_Code ?> |
<script> // Javascript program to find
// the minimum product
// of adjacent elements
let N = 3;
let M = 4;
// Function to return the
// minimum product of
// adjacent elements
function minimumProduct(mat)
{
// initial minimum
let minimum = Number.MAX_VALUE;
// Traverse in the matrix
// except the first, last row
// first and last column
for (let i = 1; i < N - 1; i++)
{
for (let j = 1; j < M - 1; j++)
{
// product the
// adjacent elements
let p = mat[i - 1][j] *
mat[i + 1][j] *
mat[i][j + 1] *
mat[i][j - 1];
// if the product is less
// than the previously
// computed minimum
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> |
384
Time Complexity: O(N*M), where N and M are the number of rows and columns in the given matrix
Auxiliary Space: O(1)