เราได้รับตัวแปร x1, x2, y1, y2 แทนจุดสองจุดบนระบบพิกัด 2 มิติเป็น (x1, y1) และ (x2, y2) เป้าหมายคือการหาเส้นทางทั้งหมดที่มีระยะทางเท่ากับระยะทางแมนฮัตตันระหว่างจุดทั้งสองนี้
ระยะทางแมนฮัตตัน
แมนฮัตตัน ระยะห่างระหว่างจุดสองจุด (x1, y1) และ (x2, y2) คือ −
MD=|x1 – x2| + |y1 – y2|
เอา A=|x1 – x2| และ B=|y1 – y2|
เส้นทางทั้งหมดที่มีระยะทางแมนฮัตตันเท่ากับ MD จะนับเป็น (A+B) ขอบแนวนอนและขอบแนวตั้ง 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. แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
ในแนวทางนี้ เราจะสร้างเวกเตอร์ที่แสดงขั้นตอนเป็นคู่
หากต้องการเคลื่อนที่ไปในทิศทางใดทิศทางหนึ่ง หากตำแหน่ง cur x ( หรือ y ) คือ> n (หรือ m) จำนวนการเคลื่อนที่ที่จะไปถึง n (หรือ m) คือ ( ตำแหน่ง n - cur )/x หากน้อยกว่านั้นจำนวนการเคลื่อนไหวที่จะไปถึง 1 คือ ( ตำแหน่ง cur - 1 )/x.
-
ใช้อาร์เรย์ arr[] ที่มี 0 และ 1
-
ฟังก์ชัน 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