मान लीजिए कि हमारे पास प्रस्थान और आगमन हवाई अड्डों के जोड़े द्वारा दर्शाए गए एयरलाइन टिकटों की एक सूची है, जैसे [से, से], हमें यात्रा कार्यक्रम को सही क्रम में फिर से बनाना होगा। सभी टिकट केएलके से प्रस्थान करने वाले व्यक्ति के हैं। इसलिए, यात्रा कार्यक्रम JFK से शुरू होना चाहिए।
तो अगर इनपुट [["एमयूसी", "एलएचआर"], ["केएलके", "एमयूसी"], ["एसएफओ", "एसजेसी"], ["एलएचआर", "एसएफओ"]] जैसा है, तो आउटपुट ["KLK", "MUC", "LHR", "SFO", "SJC"] होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
एरे रेट और ग्राफ नामक मानचित्र को परिभाषित करें।
-
विज़िट नामक विधि को परिभाषित करें। यह इनपुट के रूप में एयरपोर्ट का नाम लेगा
-
जबकि ग्राफ का आकार [एयरपोर्ट] 0 नहीं है
-
x :=ग्राफ का पहला तत्व [हवाई अड्डा]
-
ग्राफ़ [एयरपोर्ट]
. से पहला तत्व हटाएं -
कॉल विज़िट(x)
-
-
हवाई अड्डे को रिट में डालें
-
अब मुख्य विधि से निम्न कार्य करें -
-
मेरे लिए 0 से लेकर टिकर सरणी के आकार तक
-
यू:=टिकट [i, 0], वी:=टिकट [i, 1], ग्राफ में वी डालें[यू]
-
-
विज़िट ("केएलके") क्योंकि यह पहला हवाई अड्डा है
-
सूची को उलट दें और वापस लौटें
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h> using name space 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("KLK"); 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"},{"KLK","MUC"},{"SFO","SJC"},{"LHR","SFO"}}; print_vector(ob.findItinerary(v)); }
इनपुट
{{"MUC","LHR"},{"KLK","MUC"},{"SFO","SJC"},{"LHR","SFO"}}
आउटपुट
[KLK, MUC, LHR, SFO, SJC, ]