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