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 elementsint 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 Codeint 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 elementsimport java.io.*;class GFG{static int N = 3;static int M = 4;// Function to return the // minimum product of // adjacent elementsstatic 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 Codepublic 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 elementsimport sysN = 3M = 4# Function to return the minimum# product of adjacent elementsdef 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 Codeif __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 elementsusing System;class GFG{static int N = 3;static int M = 4;// Function to return the // minimum product of // adjacent elementsstatic 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 Codepublic 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 elementsfunction 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!
