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

C++ में समानता समीकरणों की संतुष्टि

मान लीजिए कि हमारे पास एक सरणी है यदि समीकरण जो चर के बीच संबंधों का प्रतिनिधित्व करते हैं, अब प्रत्येक स्ट्रिंग समीकरण [i] की लंबाई 4 है और दो अलग-अलग रूपों में से एक लेता है:"ए ==बी" या "ए! =बी"। यहां, ए और बी लोअरकेस अक्षर हैं, जो एक-अक्षर चर नामों का प्रतिनिधित्व कर रहे हैं। इसलिए हमें सत्य खोजना होगा यदि और केवल यदि चर नामों के लिए पूर्णांक निर्दिष्ट करना संभव है ताकि सभी दिए गए समीकरणों को संतुष्ट किया जा सके।

यदि इनपुट इस प्रकार है:["a==b",,"b==c",,"a==c"], तो उत्तर सही होगा।

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

  • getParent() नामक एक विधि को परिभाषित करें, यह वर्ण x और मानचित्र m लेगा, यह निम्नानुसार काम करेगा -

  • अगर m[x] =x, तो x लौटाएं,

  • अन्यथा सेट करें m[x] :=getParent(m[x], m) और वापसी m[x]

  • मुख्य विधि से, निम्न कार्य करें -

  • दो सरणियों को समान परिभाषित करें और समान नहीं, माता-पिता नामक मानचित्र बनाएं

  • n :=e का आकार

  • मैं के लिए 0 से n - 1 की सीमा में

    • माता-पिता सेट करें [ई [i, 0]]:=ई [i, 0], माता-पिता [ई [i, 3]]:=ई [i, 3]

    • यदि e[i, 1] बराबर चिह्न है, तो i को समान सरणी में डालें, अन्यथा i को समान सरणी में डालें

  • मैं के लिए 0 से बराबर के आकार में - 1

    • अनुक्रमणिका :=बराबर[i], u, v को e[index, 0] और e[index, 3]

      के रूप में सेट करें
    • माता-पिता [getParent (यू, माता-पिता)]:=माता-पिता [getParent (v, माता-पिता)]

  • मेरे लिए 0 से लेकर not समान के आकार तक - 1

    • अनुक्रमणिका :=notEqual[i], u, v को e[index, 0] और e[index, 3]

      के रूप में सेट करें
    • अगर getParent(u, parent) =getParent(v, parent) मिलता है, तो झूठी वापसी करें

  • सही लौटें

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   char getParent(char x, map <char, char> m){
      if(m[x] == x) return x;
      return m[x] = getParent(m[x], m);
   }
   bool equationsPossible(vector<string>& e) {
      vector <int> equal;
      vector <int> notEqual;
      map <char, char> parent;
      int n = e.size();
      for(int i = 0; i < n; i++){
         parent[e[i][0]]= e[i][0];
         parent[e[i][3]]= e[i][3];
         if(e[i][1] == '='){
            equal.push_back(i);
         }else{
            notEqual.push_back(i);
         }  
      }
      for(int i = 0; i < equal.size(); i++){
         int idx = equal[i];
         char u = e[idx][0];
         char v = e[idx][3];
         parent[getParent(u, parent)] = parent[getParent(v, parent)];
      }
      for(int i = 0; i < notEqual.size(); i++){
         int idx = notEqual[i];
         char u = e[idx][0];
         char v = e[idx][3];
         if(getParent(u, parent) == getParent(v, parent)) return false;
      }
      return true;
   }
};
main(){
   vector<string> v1 = {"a==b","b==c","a==c"};
   Solution ob;
   cout << (ob.equationsPossible(v1));
}

इनपुट

["a==b","b==c","a==c"]

आउटपुट

true

  1. सी ++ में ऐरे कार्यान्वयन के साथ बाइनरी ट्री

    एक बाइनरी ट्री एक विशेष प्रकार का पेड़ है जिसमें पेड़ के प्रत्येक नोड में अधिकतम दो चाइल्ड नोड हो सकते हैं। इन चाइल्ड नोड्स को राइट चाइल्ड और लेफ्ट चाइल्ड के रूप में जाना जाता है। एक साधारण बाइनरी ट्री है - पेड़ों का प्रतिनिधित्व करने के दो तरीके हैं, गतिशील नोड प्रतिनिधित्व जो लिंक की गई सूची

  1. C++ संबंधपरक और समानता संचालक

    C प्रोग्रामिंग में, 2 वेरिएबल में होल्ड किए गए मानों की तुलना निम्नलिखित ऑपरेटरों द्वारा शोषण से की जाएगी और उनके बीच संबंध निर्धारित किया जाएगा। इन ऑपरेटरों को रिलेशनल ऑपरेटर कहा जाता है। उपलब्ध विभिन्न C++ संबंधपरक ऑपरेटर हैं- ऑपरेटर्स विवरण इससे अधिक = इससे बड़ा या इसके बराबर <=

  1. Linux पर C++ का सबसे अच्छा IDE क्या है?

    केवल टेक्स्ट एडिटर्स पर बड़े प्रोजेक्ट्स को मैनेज करना मुश्किल है। यदि आप ऐसे मामलों में आईडीई का उपयोग करते हैं तो आप अधिक उत्पादक और कम निराश होने की संभावना रखते हैं। विभिन्न प्रकार के आईडीई हैं और आपको अपनी आवश्यकताओं के अनुरूप सही का चयन करना चाहिए। Linux पर C++ के लिए एक भी सर्वश्रेष्ठ IDE नही