ধরুন আমাদের দুটি স্থানাঙ্ক (x1, y1) এবং (x2, y2) আছে। একটি খরগোশ খাবারের বাক্স টানছে। তিনি শুধুমাত্র 1 ইউনিট আকারের দড়ি দিয়ে একটি দড়ি দিয়ে সংযুক্ত করেছিলেন। খরগোশ বাক্সটিকে 1 ইউনিট দ্বারা একই দিকে সরানোর আগে যেখানে দাঁড়িয়ে আছে সেখানে টেনে নিয়ে যাবে। খরগোশ বাক্সটি না টেনে 1 ইউনিট ডানে, বামে, উপরে বা নীচে সরাতে পারে। এই ক্ষেত্রে, এটি বাক্স থেকে সঠিকভাবে 1 ইউনিট দূরে থাকা আবশ্যক নয়। সে যদি বাক্সটি আবার টেনে আনতে চায়, তাহলে অবশ্যই বাক্সের পাশের একটি বিন্দুতে যেতে হবে। খরগোশ যে কোন সময়ে শুরু করতে পারে। যেকোনো দিক থেকে 1 ইউনিট ভ্রমণ করতে 1 সেকেন্ড সময় লাগে। বাক্সটিকে শুরুর অবস্থান থেকে শেষ অবস্থানে নিয়ে যাওয়ার জন্য আমাদের সর্বনিম্ন সময় খুঁজে বের করতে হবে৷
সুতরাং, ইনপুট যদি x1 =1 এর মত হয়; y1 =1; x2 =2; y2 =2, তাহলে আউটপুট হবে 4, কারণ খরগোশ বিন্দুতে (2,1) শুরু করতে পারে। এটি (3,1) থাকা অবস্থায় বাক্সটিকে (2,1) এ টেনে নিয়ে যায়। তারপরে বাক্সটি না টেনে (3,2) এবং তারপরে (2,2) এ চলে যায়। তারপর, (2,3) যাওয়ার সময় বাক্সটিকে (2,2) এ টেনে আনে। এটি 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