Given a list of airline tickets represented by pairs of departure and arrival airports [from, to],
reconstruct the itinerary in order. All of the tickets belong to a man who departs from JFK.
Thus, the itinerary must begin with JFK.
Note:
- If there are multiple valid itineraries, you should return the itinerary that has the smallest lexical order when read as a single string. For example, the itinerary
["JFK", "LGA"]has a smaller lexical order than["JFK", "LGB"]. - All airports are represented by three capital letters (IATA code).
- You may assume all tickets form at least one valid itinerary.
Example 1:
tickets = [["MUC",
"LHR"], ["JFK", "MUC"], ["SFO", "SJC"], ["LHR", "SFO"]]
Return ["JFK", "MUC", "LHR", "SFO", "SJC"].
Example 2:
tickets = [["JFK","SFO"],["JFK","ATL"],["SFO","ATL"],["ATL","JFK"],["ATL","SFO"]]
Return ["JFK","ATL","JFK","SFO","ATL","SFO"].
Another possible reconstruction is ["JFK","SFO","ATL","JFK","ATL","SFO"]. But it is larger
in lexical order.
解法一:
dos遍历所有path。
class Solution {
public:
vector<string> findItinerary(vector<pair<string, string>> tickets) {
vector<string> res;
unordered_map<string, multiset<string>> m;
for(auto a:tickets){
m[a.first].insert(a.second);
}
findItineary(m,"JFK",res);
return vector<string>(res.rbegin(), res.rend());
}
void findItineary(unordered_map<string, multiset<string>>& m, string s, vector<string>& res){
while(m[s].size()){
string t = *m[s].begin();
m[s].erase(m[s].begin());
findItineary(m,t,res);
}
res.push_back(s);
}
};
本文介绍了一种算法,用于根据给定的机票对(包括出发地和目的地)重构旅行者的完整行程。该算法确保行程始于JFK机场,并在多个可能的行程中选择字典序最小的一个。通过使用map和multiset数据结构进行深度优先搜索实现。

5507

被折叠的 条评论
为什么被折叠?



