Find minimum area of rectangle with given set of coordinates - GeeksforGeeks

25 May, 2021
Given an array of set of points in the X-Y plane. The task is to find the minimum area of a rectangle that can be formed from these points. The sides of the rectangle should be parallel to the X and Y axes. If a rectangle cannot be formed with the given points then print .Examples:  
Input: arr[][] = [[1, 1], [1, 3], [3, 1], [3, 3], [2, 2]] Output: 4 The only rectangle possible will be formed with the points (1, 1), (1, 3), (3, 1) and (3, 3)Input: arr[][] = [[1, 1], [1, 3], [3, 1], [3, 3], [4, 1], [4, 3]] Output: 2  
 
Approach: Group the points by coordinates, so that points on straight vertical lines are grouped together. Then, for every pair of points in a group, for eg. coordinates (X, Y1) and (X, Y2), we check for the smallest rectangle with this pair of points as the rightmost edge of the rectangle to be formed. We can do this by keeping track of all other pairs of points we’ve visited before. Finally return the minimum possible area of the rectangle obtained.Below is the implementation of the above approach:  
CPP
Java
Python
Javascript
// C++ Implementation of above approach#include <bits/stdc++.h>using namespace std; // function to find minimum area of Rectangleint minAreaRect(vector<vector<int>> A){     // creating empty columns    map<int,vector<int>> columns;     // fill columns with coordinates    for(auto i:A)        columns[i[0]].push_back(i[1]);     map<pair<int,int>,int > lastx;     int ans = INT_MAX;     for (auto x:columns)    {        vector<int> column = x.second;        sort(column.begin(), column.end());        for (int j = 0; j < column.size(); j++)        {            for (int i = 0; i < j; i++)            {                int y1 = column[i];                 // check if rectangle can be formed                if (lastx.find({y1, column[j]}) != lastx.end())                {                    ans = min(ans, (x.first - lastx[{y1, column[j]}]) *                            (column[j] - column[i]));                }                lastx[{y1, column[j]}] = x.first;            }            }        }     if (ans < INT_MAX)        return ans;    else        return 0;} // Driver codeint main(){    vector<vector<int>> A = {{1, 1}, {1, 3}, {3, 1}, {3, 3}, {2, 2}};    cout << (minAreaRect(A));    return 0;} // This code is contributed by mohit kumar 29
/*package whatever //do not write package name here */// Java Implementation of above approachimport java.io.*;import java.util.*; class GFG {   //# function to find minimum area of Rectangle  public static int minAreaRect(int[][] points)  {     // creating empty columns    @SuppressWarnings("unchecked")    Set<Integer> columns = new HashSet();     // fill columns with coordinates    for (int[] point : points)      columns.add(40001 * point[0] + point[1]);     int ans = Integer.MAX_VALUE;    for (int i = 0; i < points.length; ++i)      for (int j = i + 1; j < points.length; ++j) {        if (points[i][0] != points[j][0]            && points[i][1] != points[j][1]) {          if (columns.contains(40001                               * points[i][0]                               + points[j][1])              && columns.contains(                40001 * points[j][0]                + points[i][1])) {            ans = Math.min( ans, Math.abs(points[j][0]                            - points[i][0])              * Math.abs(points[j][1]                         - points[i][1]));          }        }      }     return ans < Integer.MAX_VALUE ? ans : 0;  }     // Driver code  public static void main(String[] args)  {     int[][] A = {{1, 1}, {1, 3}, {3, 1}, {3, 3}, {2, 2}};    System.out.println(minAreaRect(A));  }} // This code is contributed by maheshwaripiyush9
# Python Implementation of above approachimport collections # function to find minimum area of Rectangledef minAreaRect(A):     # creating empty columns    columns = collections.defaultdict(list)     # fill columns with coordinates    for x, y in A:        columns[x].append(y)     lastx = {}    ans = float('inf')     for x in sorted(columns):        column = columns[x]        column.sort()        for j, y2 in enumerate(column):            for i in range(j):                y1 = column[i]                 # check if rectangle can be formed                if (y1, y2) in lastx:                    ans = min(ans, (x - lastx[y1, y2]) * (y2 - y1))                lastx[y1, y2] = x     if ans < float('inf'):        return ans    else:        return 0 # Driver codeA = [[1, 1], [1, 3], [3, 1], [3, 3], [2, 2]]print(minAreaRect(A))
<script>/*package whatever //do not write package name here */// Javascript Implementation of above approach         //# function to find minimum area of Rectangle    function minAreaRect(points)    {        // creating empty columns    let columns = new Set();      // fill columns with coordinates    for (let point=0;point<points.length;point++)      columns.add(40001 * points[point][0] + points[point][1]);      let ans = Number.MAX_VALUE;    for (let i = 0; i < points.length; ++i)      for (let j = i + 1; j < points.length; ++j) {        if (points[i][0] != points[j][0]            && points[i][1] != points[j][1]) {          if (columns.has(40001                               * points[i][0]                               + points[j][1])              && columns.has(                40001 * points[j][0]                + points[i][1])) {            ans = Math.min( ans, Math.abs(points[j][0]                            - points[i][0])              * Math.abs(points[j][1]                         - points[i][1]));          }        }      }      return ans < Number.MAX_VALUE ? ans : 0;    }         // Driver code    let A = [[1, 1], [1, 3], [3, 1], [3, 3], [2, 2]];    document.write(minAreaRect(A));          // This code is contributed by patel2127</script>
4
 
mohit kumar 29
maheswaripiyush9
patel2127
area-volume-programs
square-rectangle
Mathematical
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Merge two sorted arrays
Modulo Operator (%) in C/C++ with Examples
Prime Numbers
Print all possible combinations of r elements in a given array of size n
The Knight's tour problem | Backtracking-1
Operators in C / C++
Program for factorial of a number
Find minimum number of coins that make a given value
Program to find sum of elements in a given array
Euclidean algorithms (Basic and Extended)