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

C++ में यात्रा कार्यक्रम का पुनर्निर्माण करें


मान लीजिए कि हमारे पास एयरलाइन टिकटों की एक सूची है जो प्रस्थान और आगमन हवाई अड्डों के जोड़े द्वारा दर्शायी जाती है जैसे [from, to], हमें यात्रा कार्यक्रम को क्रम में बनाना होगा। सभी टिकट JFK से प्रस्थान करने वाले व्यक्ति के हैं। इसलिए, यात्रा कार्यक्रम JFK से शुरू होना चाहिए।

इसलिए यदि इनपुट [["MUC", "LHR"], ["JFK", "MUC"], ["SFO", "SJC"], ["LHR", "SFO"]] जैसा है, तो आउटपुट ["JFK", "MUC", "LHR", "SFO", "SJC"] होगा।

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

  • एरे रेट और ग्राफ नामक मानचित्र को परिभाषित करें।

  • विज़िट नामक विधि को परिभाषित करें। यह इनपुट के रूप में एयरपोर्ट का नाम लेगा

  • जबकि ग्राफ का आकार [एयरपोर्ट] 0 नहीं है

    • x :=ग्राफ का पहला तत्व [हवाई अड्डा]

    • ग्राफ़ [एयरपोर्ट]

      . से पहला तत्व हटाएं
    • कॉल विज़िट(x)

  • हवाई अड्डे को रिट में डालें

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

  • मेरे लिए 0 से लेकर टिकर सरणी के आकार तक

    • यू:=टिकट [i, 0], वी:=टिकट [i, 1], ग्राफ में वी डालें[यू]

  • विज़िट ("जेएफके") क्योंकि यह पहला हवाई अड्डा है

  • सूची को उलट दें और वापस लौटें

उदाहरण(C++)

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

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
class Solution {
   public:
   vector <string> ret;
   map < string, multiset <string> > graph;
   vector<string> findItinerary(vector<vector<string>>& tickets) {
      for(int i = 0; i < tickets.size(); i++){
         string u = tickets[i][0];
         string v = tickets[i][1];
         graph[u].insert(v);
      }
      visit("JFK");
      reverse(ret.begin(), ret.end());
      return ret;
   }
   void visit(string airport){
      while(graph[airport].size()){
         string x = *(graph[airport].begin());
         graph[airport].erase(graph[airport].begin());
         visit(x);
      }
      ret.push_back(airport);
   }
};
main(){
   Solution ob;
   vector<vector<string>> v = {{"MUC","LHR"},{"JFK","MUC"},{"SFO","SJC"},{"LHR","SFO"}};
   print_vector(ob.findItinerary(v));
}

इनपुट

[["MUC","LHR"],["JFK","MUC"],["SFO","SJC"],["LHR","SFO"]]

आउटपुट

[JFK, MUC, LHR, SFO, SJC, ]

  1. सी++ में इनकैप्सुलेशन

    Encapsulation डेटा और विधियों को एक साथ लाता है जो डेटा को एक घटक में हेरफेर करता है और उन्हें बाहरी हस्तक्षेप से बचाता है। संक्षेप में, एनकैप्सुलेशन में डेटा के साथ-साथ डेटा का उपयोग करने वाले कार्यों को बंडल करना शामिल है। डेटा इनकैप्सुलेशन डेटा छिपाने की बहुत महत्वपूर्ण अवधारणा की ओर ले जाता है।

  1. C++ . में पहचानकर्ता

    C++ पहचानकर्ता एक ऐसा नाम है जिसका उपयोग किसी चर, फ़ंक्शन, वर्ग, मॉड्यूल, या किसी अन्य उपयोगकर्ता-परिभाषित आइटम की पहचान करने के लिए किया जाता है। एक पहचानकर्ता अक्षर A से Z या a से z या अंडरस्कोर (_) से शुरू होता है और उसके बाद शून्य या अधिक अक्षर, अंडरस्कोर और अंक (0 से 9) होते हैं। C++ पहचानकर्त

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

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