मान लीजिए हमारे पास दो निर्देशांक (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 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
उदाहरण
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:
#includeusing 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