​[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:

  1. 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"]​

  1.  has a smaller lexical order than 

​["JFK", "LGB"]​

  1. .
  2. All airports are represented by three capital letters (IATA code).
  3. 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.

class Solution {
public:
vector<string> findItinerary(vector<pair<string, string>> tickets) {
map<string, multiset<string>> edges;
for (auto p : tickets){
edges[p.first].insert(p.second);
}
dfs(edges, "JFK");
return vector<string>(res.rbegin(),res.rend());
}
private:
void dfs(map<string, multiset<string>> &edges, string str){
while (edges[str].size()) {
string t = *edges[str].begin();
edges[str].erase(edges[str].begin());
dfs(edges, t);
}
res.push_back(str);//放在后面
}
vector<string> res;
};

res.push_back(str);放在dfs函数中的前面会出现这样的错误


Input: [["JFK","KUL"],["JFK","NRT"],["NRT","JFK"]]


Output: ["JFK","KUL","NRT","JFK"]


Expected: ["JFK","NRT","JFK","KUL"]