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

C++ में सबसे छोटा सामान्य क्षेत्र

मान लीजिए कि हमारे पास उन क्षेत्रों की कुछ सूचियाँ हैं जहाँ प्रत्येक सूची के पहले क्षेत्र में उस सूची के अन्य सभी क्षेत्र शामिल हैं। मूल रूप से, यदि एक क्षेत्र X में कोई अन्य क्षेत्र Y है, तो X, Y से बड़ा है। साथ ही परिभाषा के अनुसार एक क्षेत्र X में स्वयं शामिल है। इसलिए यदि हमारे पास दो क्षेत्र r1 और r2 हैं, तो हमें उन दोनों को शामिल करने वाला सबसे छोटा क्षेत्र खोजना होगा। तो अगर हमारे पास r1, r2 और r3 है जैसे कि r1 में r3 शामिल है, तो यह गारंटी है कि कोई r2 नहीं है जैसे कि r2 में r3 शामिल है। तो अगर इनपुट [["पृथ्वी", "उत्तरी अमेरिका", "दक्षिण अमेरिका"], ["उत्तरी अमेरिका", "संयुक्त राज्य", "कनाडा"], ["संयुक्त राज्य अमेरिका", "न्यूयॉर्क", "बोस्टन"], ["कनाडा", "ओंटारियो", "क्यूबेक"], ["दक्षिण अमेरिका", "ब्राज़ील"]], और r1 ='क्यूबेक' और r2 ='न्यूयॉर्क', तो आउटपुट होगा 'उत्तरी अमेरिका'

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • पेरेंट नामक नक्शा बनाएं
  • i के लिए 0 से r के आकार की सीमा में
    • जे के लिए 1 से लेकर r के आकार तक[i]
      • अभिभावक[r[i, j]] :=r[i, 0]
  • चेन नामक एक सेट बनाएं, और x को चेन में डालें
  • जबकि x पैरेंट में है,
    • x:=माता-पिता[x]
    • x को चेन में डालें
  • जबकि y श्रृंखला में मौजूद है
    • y:=माता-पिता[y]
  • वापसी y

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   string findSmallestRegion(vector<vector<string>>& r, string x, string y) {
      map < string, string> parent;
      for(int i = 0; i < r.size(); i++){
         for(int j = 1; j < r[i].size(); j++){
            parent[r[i][j]] = r[i][0];
         }
      }
      set <string> chain;
      chain.insert(x);
      while(parent.find(x)!=parent.end()){
         x = parent[x];
         chain.insert(x);
      }
      while(chain.find(y)==chain.end()){
         y = parent[y];
      }
      return y;
   }
};
main(){
   vector<vector<string>> v = {
      {"Earth","North America","South America"},
      {"North America","United States","Canada"},
      {"United States","New York","Boston"},  
      {"Canada","Ontario","Quebec"},{"South America","Brazil"}
   };
   Solution ob;
   cout << (ob.findSmallestRegion(v, "Quebec", "New York"));
}

इनपुट

[["Earth","North America","South America"],["North America","United States","Canada"],
["United States","New York","Boston"],["Canada","Ontario","Quebec"],["South America","Brazil"]]
"Quebec"
"New York"

आउटपुट

North America

  1. C++ में सबसे छोटी रेंज II

    मान लीजिए कि हमारे पास पूर्णांकों की एक सरणी A है, प्रत्येक पूर्णांक A[i] के लिए हमें या तो x =-K या x =K चुनना है, और x को A[i] में जोड़ना है (केवल एक बार)। तो इस प्रक्रिया के बाद, हमारे पास कुछ सरणी बी है। हमें बी के अधिकतम मूल्य और बी के न्यूनतम मूल्य के बीच सबसे छोटा संभव अंतर खोजना होगा। इसलिए

  1. सी ++ में स्वैप के साथ सबसे छोटा स्ट्रिंग

    मान लीजिए कि हमने एक स्ट्रिंग s, और स्ट्रिंग जोड़े में सूचकांकों के जोड़े की एक सरणी दी है, जहां जोड़े [i] =[a, b] स्ट्रिंग के 2 सूचकांकों (0-अनुक्रमित) को इंगित करता है। हम दिए गए जोड़े में सूचकांक के किसी भी जोड़े में वर्णों को जितनी बार चाहें स्वैप कर सकते हैं। हमें लेक्सिकोग्राफिक रूप से सबसे छो

  1. सी ++ में सभी पंक्तियों में सबसे छोटा सामान्य तत्व खोजें

    मान लीजिए कि हमारे पास एक मैट्रिक्स मैट है जहां प्रत्येक पंक्ति को गैर-घटते क्रम में क्रमबद्ध किया गया है, हमें सभी पंक्तियों में सबसे छोटा सामान्य तत्व खोजना होगा। यदि कोई सामान्य तत्व नहीं है, तो -1 लौटाएं। तो अगर मैट्रिक्स की तरह है - 1 2 3 4 5 2 4 5 8 10 3 5 7 9 11 1 3 5 7 9 आउटपुट 5 होगा