2D 좌표계의 두 점을 (x1, y1) 및 (x2, y2)로 나타내는 변수 x1, x2, y1, y2가 제공됩니다. 목표는 이 두 점 사이의 맨해튼 거리와 같은 거리를 갖는 모든 경로를 찾는 것입니다.
맨해튼 거리
맨해튼 두 점(x1, y1)과 (x2, y2) 사이의 거리는 -
MD=|x1 – x2| + |y1 – y2|
A=|x1 – x2| 및 B=|y1 – y2|
맨해튼 거리가 MD와 같은 모든 경로는 가장자리 수가 (A+B)로 계산됩니다. A 수평 가장자리 및 B 수직 가장자리. 따라서 (A+B) 모서리를 2개의 그룹으로 나눌 수 있는 조합은 ( A + B )CB =( A+B )입니다! / (A!)(B!)
예를 들어 이해하자
입력
출력 − 그리드에서 주어진 방향으로 가능한 이동 수는 − 6
설명
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.
입력 - A =4, B =4, x =2, y =2; 이동 ={2, 1}, { -2, -3 }
출력 − 그리드에서 주어진 방향으로 가능한 이동 수는 − 2
설명
Choosing move {2,1} = (2,2) → (4,3) - 2 steps Choosing move {-2,-3} = (2,0) X out of bound Total 2 steps.
아래 프로그램에서 사용한 접근 방식은 다음과 같습니다.
이 접근 방식에서는 단계를 pair
특정 방향으로 이동하기 위해 현재 위치 x(또는 y)가> n(또는 m)이면 n(또는 m)에 도달하기 위한 이동 횟수는 ( n - 현재 위치 )/x입니다. 이보다 작으면 1에 도달하기 위한 이동 수는 ( 현재 위치 - 1 )/x입니다.
-
0과 1을 포함하는 배열 arr[]를 사용합니다.
-
count_cars(int arr[], int size) 함수는 배열과 길이를 입력으로 받아 지나가는 차량의 수를 반환합니다.
-
초기 카운트를 0으로 합니다.
-
인덱스 i=0에서 i
까지 배열 탐색 -
arr[i]가 0이면 인덱스 j=i+1에서 j
까지 배열을 다시 탐색합니다. -
각 arr[j]에 대해 1 증분으로 쌍(arr[i],arr[j])은 (0,1)이고 i
입니다. -
마침내 우리는 총계를 얻게 될 것입니다.
-
결과로 카운트를 반환합니다.
예
#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; }
출력
위의 코드를 실행하면 다음과 같은 출력이 생성됩니다 -
Count of paths with distance equal to Manhattan distance are: 15