Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

सी++ में 2डी बाइनरी ऐरे में बेस्ट मीटिंग प्वाइंट

इस समस्या में, हमें एक 2D बाइनरी ऐरे दिया जाता है यानी इसमें वे मान होते हैं जो या तो 0 या 1 होते हैं, जहाँ 1 को समूह के एक व्यक्ति के घर के रूप में चिह्नित किया जाता है। और ग्रुप के लोग मिलना चाहते हैं। इसलिए, उन्हें एक सामान्य बिंदु पर मिलने के लिए उनके द्वारा तय की गई कुल दूरी को कम से कम करने की आवश्यकता है। एक मान्य मीटिंग पॉइंट कहीं भी हो सकता है लेकिन घर पर किसी के पास नहीं।

न्यूनतम दूरी ज्ञात करने के लिए एक सूत्र बनाया जाता है, इसे मैनहट्टन दूरी कहा जाता है, जहाँ दूरी -

(p1, p2) =|p2.x| + |p2.y - p1.y|.

आइए एक उदाहरण लेते हैं, अवधारणा को स्पष्ट करने के लिए

उदाहरण

Input:
   {10001}
   {00000}
   {00100}
Output: 6

व्याख्या - यहाँ सबसे अच्छा मिलन बिंदु (0,2) है जो तय की गई दूरी को 6 (2+2+2) के बराबर बनाता है।

आइए अब इस समस्या का समाधान तैयार करते हैं। यहां, हमें सरणी में 1 के रूप में चिह्नित सभी बिंदुओं में से एक मध्य बिंदु खोजना है। हम क्षैतिज और ऊर्ध्वाधर केंद्रों (मध्य बिंदुओं) को अलग-अलग ढूंढकर ऐसा करेंगे। और मैं सभी 1 चिह्नित बिंदुओं से बिंदु की दूरी का पता लगा रहा हूं।

एल्गोरिदम

Step 1 : Create two structures with the values of horizontal and vertical positions of the points Marked one.
Step 2 : In both this structures, find the mid positions and treat (midx, midy) it as the meeting point.
Step 3 : Calculate the distance of each point it to the mid. Step 4 : return the sum of all distances.

उदाहरण

आइए इस एल्गोरिथम के आधार पर एक एल्गोरिथम बनाएं -

#include <bits/stdc++.h>
using namespace std;
#define ROW 3
#define COL 5
int minMeetingDistance(int grid[][COL]) {
   if (ROW == 0 || COL == 0)
   return 0;
   vector<int> vertical;
   vector<int> horizontal;
   for (int i = 0; i < ROW; i++) {
      for (int j = 0; j < COL; j++) {
         if (grid[i][j] == 1) {
            vertical.push_back(i);
            horizontal.push_back(j);
         }
      }
   }
   sort(vertical.begin(),vertical.end());
   sort(horizontal.begin(),horizontal.end());
   int size = vertical.size()/2;
   int midx = vertical[size];
   int midy = horizontal[size];
   int distance = 0;
   for (int i = 0; i < ROW; i++)
   for (int j = 0; j < COL; j++)
   if (grid[i][j] == 1)
   distance += abs(midx - i) + abs(midy - j);
   return distance;
}
int main() {
   int distance[ROW][COL] =
   {{1, 0, 1, 0, 1},
   {0, 0, 0, 1, 0},
   {0, 1, 1, 0, 0}};
   cout<<"The minimum distance travelled to meet is "<<minMeetingDistance(distance);
   return 0;
}

आउटपुट

The minimum distance travelled to meet is 11

  1. C++ फ़ंक्शन में 2D सरणी पास करना

    किसी फ़ंक्शन को तर्क के रूप में Arrays को पारित किया जा सकता है। इस कार्यक्रम में, हम 2 आयामी सरणी के तत्वों को एक फ़ंक्शन में पास करके प्रदर्शित करने के लिए प्रदर्शन करेंगे। एल्गोरिदम Begin The 2D array n[][] passed to the function show(). Call function show() function, the array n (n) is tra

  1. C++ में बाइनरी सर्च

    बाइनरी सर्च एक ऐसा तरीका है जिससे क्रमबद्ध सरणी में आवश्यक तत्व को बार-बार आधा करके और आधे में खोज कर खोजा जा सकता है। यह विधि संपूर्ण सरणी से प्रारंभ करके की जाती है। फिर इसे आधा कर दिया जाता है। यदि आवश्यक डेटा मान सरणी के मध्य में तत्व से अधिक है, तो सरणी के ऊपरी आधे हिस्से पर विचार किया जाता है

  1. एक सी ++ फ़ंक्शन में एक सरणी पास करना

    C++ फ़ंक्शन के तर्क के रूप में संपूर्ण सरणी को पारित करने की अनुमति नहीं देता है। हालांकि, आप किसी इंडेक्स के बिना ऐरे का नाम निर्दिष्ट करके किसी ऐरे को पॉइंटर पास कर सकते हैं। यदि आप किसी फ़ंक्शन में एक एकल-आयाम सरणी को तर्क के रूप में पास करना चाहते हैं, तो आपको निम्नलिखित तीन तरीकों में से एक मे