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++
// 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
// 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. |
Python3
# 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#
// 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 // 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 ?> |
Javascript
<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)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!