332. Reconstruct Itinerary
Input: [["MUC", "LHR"], ["JFK", "MUC"], ["SFO", "SJC"], ["LHR", "SFO"]]
Output: ["JFK", "MUC", "LHR", "SFO", "SJC"]Input: [["JFK","SFO"],["JFK","ATL"],["SFO","ATL"],["ATL","JFK"],["ATL","SFO"]]
Output: ["JFK","ATL","JFK","SFO","ATL","SFO"]
Explanation: Another possible reconstruction is ["JFK","SFO","ATL","JFK","ATL","SFO"].
But it is larger in lexical order.// Recursive DFS
void dfs(unordered_map<string, multiset<string> >& graph, const string& s, vector<string>& res) {
while (!graph[s].empty()) {
string t = *(graph[s].begin());
graph[s].erase(graph[s].begin());
dfs(graph, t, res);
}
res.emplace_back(s);
}
vector<string> findItinerary(vector<vector<string>>& tickets) { // time: O(V + E); space: O(V + E)
vector<string> res;
unordered_map<string, multiset<string> > graph; // adjacency list
for (auto& t : tickets) {
graph[t[0]].insert(t[1]);
}
dfs(graph, "JFK", res);
return vector<string>(res.rbegin(), res.rend());
}Last updated