एक पेड़, एक गिलहरी, और कई नट हैं। स्थितियों को 2डी ग्रिड में कोशिकाओं द्वारा दर्शाया जाता है। आपका लक्ष्य गिलहरी के लिए सभी नटों को इकट्ठा करने और उन्हें एक-एक करके पेड़ के नीचे रखने के लिए न्यूनतम दूरी का पता लगाना है। गिलहरी एक समय में केवल एक अखरोट ले सकती है और चार दिशाओं में - ऊपर, नीचे, बाएँ और दाएँ, आसन्न कोशिका में जा सकती है। दूरी चालों की संख्या से प्रदर्शित होती है।
इसलिए, यदि इनपुट ऊँचाई:5 चौड़ाई:7 पेड़ की स्थिति:[2,2] गिलहरी:[4,4] नट:[[3,0], [2,5]] जैसा है, तो आउटपुट 12 होगा ,

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
एक फ़ंक्शन कैल्क () को परिभाषित करें, इसमें x1, y1, x2, y2,
लगेगा -
वापसी |x1 - x2| + |y1 - y2|
-
फ़ंक्शन minDistance() को परिभाषित करें, इसमें ऊंचाई, चौड़ाई, एक सरणी वृक्ष, एक सरणी वर्ग, एक 2D सरणी नट,
-
रिट:=0
-
मैक्सडिफ:=-इन्फ
-
इनिशियलाइज़ करने के लिए i:=0, जब i <नट का आकार, अपडेट करें (i से 1 बढ़ाएँ), करें -
-
जिला:=कैल्क (पेड़ [0], पेड़ [1], नट [i, 0], नट [i, 1])
-
रिट:=रिट + 2 * जिला
-
मैक्सडिफ:=मैक्सडिफ और 2 * डिस्ट का अधिकतम - (डिस्ट + कैल्क (नट्स [i, 0], नट्स [i, 1], वर्ग [0], वर्ग [1]))
-
-
रिटर्न रिट - मैक्सडिफ
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int calc(int x1, int y1, int x2, int y2){
return abs(x1 - x2) + abs(y1 - y2);
}
int minDistance(int height, int width, vector<int>& tree, vector<int>& sq, vector<vector>& nuts) {
int ret = 0;
int maxDiff = INT_MIN;
for (int i = 0; i < nuts.size(); i++) {
int dist = calc(tree[0], tree[1], nuts[i][0],
nuts[i][1]);
ret += 2 * dist;
maxDiff = max(maxDiff, 2 * dist - (dist + calc(nuts[i][0], nuts[i][1], sq[0], sq[1])));
}
return ret - maxDiff;
}
};
main(){
Solution ob;
vector<int> v = {2,2}, v1 = {4,4};
vector<vector<int>> v2 = {{3,0}, {2,5}};
cout << (ob.minDistance(5,7,v, v1, v2));
} इनपुट
5, 7, {2,2},{4,4}, {{3,0}, {2,5}} आउटपुट
12