สมมติว่าเรามีสองพิกัด (x1, y1) และ (x2, y2) กระต่ายกำลังดึงกล่องอาหาร เขาติดด้วยเชือกที่มีขนาดเพียง 1 ยูนิตเท่านั้น แรบบิทจะดึงกล่องไปยังตำแหน่งที่มันยืนอยู่ก่อนจะเคลื่อนที่ออกไปในทิศทางเดียวกัน 1 หน่วย กระต่ายสามารถเคลื่อนตัวไปทางขวา ซ้าย ขึ้น หรือลงได้ 1 หน่วย โดยไม่ต้องดึงกล่อง ในกรณีนี้ไม่จำเป็นต้องอยู่ห่างจากกล่องเพียง 1 หน่วย ถ้าเขาต้องการดึงกล่องอีกครั้ง มันต้องไปที่จุดข้างกล่อง แรบบิทเริ่มได้ทุกเมื่อ ใช้เวลา 1 วินาทีในการเดินทาง 1 หน่วยในทุกทิศทาง เราต้องหาเวลาขั้นต่ำที่ต้องการย้ายกล่องจากตำแหน่งเริ่มต้นไปยังตำแหน่งสิ้นสุด
ดังนั้น ถ้าอินพุตเป็น x1 =1; y1 =1; x2 =2; y2 =2 จากนั้นผลลัพธ์จะเป็น 4 เนื่องจาก Rabbit สามารถเริ่มต้นที่จุด (2,1) มันดึงกล่องไปที่ (2,1) ขณะที่อยู่ใน (3,1) จากนั้นย้ายไปที่ (3,2) แล้วไปที่ (2,2) โดยไม่ต้องดึงกล่อง จากนั้นดึงกล่องไปที่ (2,2) ขณะเคลื่อนที่ไปที่ (2,3) ใช้เวลา 4 วินาที
ขั้นตอน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
s := 0 if x1 is not equal to x2 and y1 is not equal to y2, then: s := |x2 - x1| + |y2 - y1| Otherwise s := |x2 - x1| + |y2 - y1| return s
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h> using namespace std; int solve(int x1, int y1, int x2, int y2){ int s = 0; if (x1 != x2 && y1 != y2) s = abs(x2 - x1) + abs(y2 - y1) + 2; else s = abs(x2 - x1) + abs(y2 - y1); return s; } int main(){ int x1 = 1; int y1 = 1; int x2 = 2; int y2 = 2; cout << solve(x1, y1, x2, y2) << endl; }
อินพุต
1, 1, 2, 2
ผลลัพธ์
4