मान लीजिए कि हमारे पास एयरलाइन टिकटों की एक सूची है जो प्रस्थान और आगमन हवाई अड्डों के जोड़े द्वारा दर्शायी जाती है जैसे [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, ]