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

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


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

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

इसे हल करने के लिए, हम निम्नलिखित चरणों का पालन करेंगे:

  • ret नामक सरणी और graph नामक मैप परिभाषित करें।
  • visit नामक एक विधि परिभाषित करें। यह हवाई अड्डे का नाम इनपुट के रूप में लेगा
  • जब तक graph[हवाई अड्डा] का आकार 0 नहीं है
    • x := graph[हवाई अड्डा] का पहला तत्व
    • graph[हवाई अड्डा] से पहला तत्व हटाएं
    • visit(x) कॉल करें
  • हवाई अड्डा को ret में डालें
  • अब मुख्य विधि से, निम्नलिखित करें:
    • i को 0 से टिकट सरणी के आकार तक लूप करें
      • u := tickets[i, 0], v := tickets[i, 1], v को graph[u] में डालें
    • visit("JFK") कॉल करें क्योंकि यह पहला हवाई अड्डा है
    • ret सूची को उल्टा करें और लौटाएं

उदाहरण (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. - C++ में एनकैप्सुलेशन (Encapsulation)

    एनकैप्सुलेशन क्या है? डेटा और उस डेटा को मैनिपुलेट करने वाले मेथड्स को एक ही घटक (क्लास) में बांधना और बाहरी हस्तक्षेप से बचाना। डेटा छिपाने (data hiding) की ओर ले जाता है। C++ में कार्यान्वयन क्लासेस (उपयोगकर्ता-परिभाषित डेटा प्रकार) का उपयोग करके। क्लास डेटा सदस्यों और मेथड्स को एक साथ बांधती है

  1. - C++ में आइडेंटिफायर

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

  1. - लिनक्स पर C++ के लिए सर्वश्रेष्ठ IDE कौन सा है?

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