- Trending Categories
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
Physics
Chemistry
Biology
Mathematics
English
Economics
Psychology
Social Studies
Fashion Studies
Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Count paths with distance equal to Manhattan distance in C++
We are given variables x1, x2, y1, y2 representing two points on a 2D coordinate system as (x1, y1) and (x2, y2). The goal is to find all the paths that will have distance equal to the Manhattan distance between these two points.
Manhattan Distance
Manhattan Distance between two points (x1, y1) and (x2, y2) is −
MD= |x1 – x2| + |y1 – y2|
Let’s take A= |x1 – x2| and B= |y1 – y2|
All paths with Manhattan distance equal to MD will have edges count as (A+B). A horizontal edge and B vertical edges. So possible combination of (A+B) edges divided into 2 groups will be ( A + B )CB = ( A+B )! / (A!)(B!)
Let us understand with examples
Input
Output − Count of possible moves in the given direction in a grid are − 6
Explanation
Choosing move {1,1} = (1,1) → (2,2) → (3,3) - 3 steps Choosing move {0,-1} = (3,2) → (3,3) → (3,2) → (3,1) - 3 steps Total 6 steps.
Input − A = 4, B = 4, x =2, y = 2; moves = {2, 1}, { -2, -3 }
Output − Count of possible moves in the given direction in a grid are − 2
Explanation
Choosing move {2,1} = (2,2) → (4,3) - 2 steps Choosing move {-2,-3} = (2,0) X out of bound Total 2 steps.
The approach used in the below program is as follows
In this approach, we will create a vector representing steps as pair<int,int>. Start traversing from point x,y. Choose a step from the vector and choose the minimum of the value taken in both directions (x axis and y axis). The minimum chosen will allow more moves to take.
To move in a particular direction, if the cur position x ( or y ) is > n (or m) then the number of moves to reach n (or m) is ( n - cur position )/x. If it is less then the number of moves to reach 1 is ( cur position - 1 )/x.
Take an array arr[] containing 0’s and 1’s.
Function count_cars(int arr[], int size) takes the array and length as input and returns the count of passing cars.
Take the initial count as 0.
Traverse array from index i=0 to i<length-1.
If arr[i] is 0, traverse array again from index j=i+1 to j<length.
For each arr[j] as 1 increment count as pair (arr[i],arr[j]) is (0,1) and i<j.
At last we will get the total count.
Return count as result.
Example
#include <bits/stdc++.h> using namespace std; long long int bio_coeff(int A, int B){ long long int temp = 1; if (B > A - B){ B = A - B; } for (int i = 0; i < B; ++i){ temp = temp * (A - i); temp = temp / (i + 1); } return temp; } long long int Manhattan_distance(int x1, int y1, int x2, int y2){ int A = abs(x1 - x2); int B = abs(y1 - y2); int count = bio_coeff(A + B, B); return count; } int main(){ int x1 = 6, y1 = 8, x2 = 2, y2 = 10; cout<<"Count of paths with distance equal to Manhattan distance are: "<< Manhattan_distance(x1, y1, x2, y2); return 0; }
Output
If we run the above code it will generate the following output −
Count of paths with distance equal to Manhattan distance are: 15