Find the integer points (x, y) with Manhattan distance atleast N

Given a number N, the task is to find the integer points (x, y) such that 0 <= x, y <= N and Manhattan distance between any two points will be atleast N.

Examples:

Input: N = 3
Output: (0, 0) (0, 3) (3, 0) (3, 3)

Input: N = 4
Output: (0, 0) (0, 4) (4, 0) (4, 4) (2, 2)

Approach:



  • Manhattan Distance between two points (x1, y1) and (x2, y2) is:
    |x1 – x2| + |y1 – y2|
  • Here for all pair of points this distance will be atleast N.
  • As 0 <= x <= N and 0 <= y <= N so we can imagine a square of side length N whose bottom left corner is (0, 0) and top right corner is (N, N).
  • So if we place 4 points in this corner then Manhattan distance will be atleast N.
  • Now as we have to maximize the number of the point we have to check is there any available point inside the square.
  • If N is even then middle point of the square which is (N/2, N/2) is integer point, otherwise, it will be float value as N/2 is not a integer when N is odd.
  • So the only available position is the middle point and we can put a point there only if N is even.
  • So number of points will be 4 if N is odd and if N is even then the number of points will be 5.

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ code to Find the integer points (x, y)
// with Manhattan distance atleast N
  
#include <bits/stdc++.h>
using namespace std;
  
// C++ function to find all possible point
vector<pair<int, int> > FindPoints(int n)
{
  
    vector<pair<int, int> > v;
  
    // Find all 4 corners of the square
    // whose side length is n
    v.push_back({ 0, 0 });
    v.push_back({ 0, n });
    v.push_back({ n, 0 });
    v.push_back({ n, n });
  
    // If n is even then the middle point
    // of the square will be an integer,
    // so we will take that point
    if (n % 2 == 0)
        v.push_back({ n / 2, n / 2 });
  
    return v;
}
  
// Driver Code
int main()
{
  
    int N = 8;
  
    vector<pair<int, int> > v
        = FindPoints(N);
  
    // Printing all possible points
    for (auto i : v) {
        cout << "(" << i.first << ", "
             << i.second << ") ";
    }
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java code to Find the integer points (x, y)
// with Manhattan distance atleast N
import java.util.*;
  
class GFG
{
  
static class pair
    int first, second; 
    public pair(int first, int second) 
    
        this.first = first; 
        this.second = second; 
    
}
  
// Java function to find all possible point
static Vector<pair> FindPoints(int n)
{
    Vector<pair> v = new Vector<pair>();
  
    // Find all 4 corners of the square
    // whose side length is n
    v.add(new pair( 0, 0 ));
    v.add(new pair( 0, n ));
    v.add(new pair( n, 0 ));
    v.add(new pair( n, n ));
  
    // If n is even then the middle point
    // of the square will be an integer,
    // so we will take that point
    if (n % 2 == 0)
        v.add(new pair( n / 2, n / 2 ));
  
    return v;
}
  
// Driver Code
public static void main(String[] args)
{
    int N = 8;
  
    Vector<pair > v = FindPoints(N);
  
    // Printing all possible points
    for (pair i : v) 
    {
        System.out.print("(" + i.first + ", "
                               i.second + ") ");
    }
}
}
  
// This code is contributed by PrinciRaj1992

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 code to Find the integer points (x, y) 
# with Manhattan distance atleast N 
  
# function to find all possible point 
def FindPoints(n) :
  
    v = []; 
  
    # Find all 4 corners of the square 
    # whose side length is n 
    v.append([ 0, 0 ]); 
    v.append([ 0, n ]); 
    v.append([ n, 0 ]); 
    v.append([ n, n ]); 
  
    # If n is even then the middle point 
    # of the square will be an integer, 
    # so we will take that point 
    if (n % 2 == 0) :
        v.append([ n // 2, n // 2 ]); 
  
    return v; 
  
# Driver Code 
if __name__ == "__main__"
  
    N = 8
  
    v = FindPoints(N); 
  
    # Printing all possible points 
    for element in v :
        print("(", element[0], 
              ",", element[1], ")", end = " "); 
  
# This code is contributed by AnkitRai01

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# code to Find the integer points (x, y)
// with Manhattan distance atleast N
using System;
using System.Collections.Generic;
  
class GFG
{
  
class pair
    public int first, second; 
    public pair(int first, int second) 
    
        this.first = first; 
        this.second = second; 
    
}
  
// Function to find all possible point
static List<pair> FindPoints(int n)
{
    List<pair> v = new List<pair>();
  
    // Find all 4 corners of the square
    // whose side length is n
    v.Add(new pair( 0, 0 ));
    v.Add(new pair( 0, n ));
    v.Add(new pair( n, 0 ));
    v.Add(new pair( n, n ));
  
    // If n is even then the middle point
    // of the square will be an integer,
    // so we will take that point
    if (n % 2 == 0)
        v.Add(new pair( n / 2, n / 2 ));
  
    return v;
}
  
// Driver Code
public static void Main(String[] args)
{
    int N = 8;
  
    List<pair > v = FindPoints(N);
  
    // Printing all possible points
    foreach (pair i in v) 
    {
        Console.Write("(" + i.first + ", "
                            i.second + ") ");
    }
}
}
  
// This code is contributed by Rajput-Ji

chevron_right


Output:

(0, 0) (0, 8) (8, 0) (8, 8) (4, 4)


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.