สมมติว่าเรามีพิกัดสองจุด (x1, y1) และ (x2, y2) กระต่ายดึงกล่องอาหาร ผูกเชือกยาว 1 หน่วย กระต่ายดึงกล่องไปที่จุดตัวเองยืน แล้วเดินหนีทิศทางเดิม 1 หน่วย กระต่ายเดิน 1 หน่วย ขวา ซ้าย บน ล่าง โดยไม่ดึงกล่อง กรณีนี้ไม่จำเป็นต้องอยู่ห่าง 1 หน่วยพอดี ถ้าอยากดึงอีก ต้องไปจุดติดกล่อง เริ่มต้นที่ไหนก็ได้ ใช้เวลา 1 วินาทีต่อ 1 หน่วย หาเวลาน้อยสุดย้ายกล่องจากเริ่มต้นถึงปลายทาง
เช่น ถ้าอินพุตคือ x1 = 1; y1 = 1; x2 = 2; y2 = 2 เอาต์พุตจะเป็น 4 เพราะเริ่ม (2,1) ดึงกล่องไป (2,1) ตัวอยู่ (3,1) เดินไป (3,2) แล้ว (2,2) ไม่ดึง แล้วดึงกล่องไป (2,2) ตัวไป (2,3) ใช้ 4 วินาที
ขั้นตอนการแก้ปัญหา
s := 0
if x1 != x2 และ y1 != y2:
s := |x2 - x1| + |y2 - y1| + 2
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