332. Reconstruct Itinerary(重要)

来源:互联网 发布:ar2048n 网络打印设置 编辑:程序博客网 时间:2024/06/05 12:47

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:

  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"] has a smaller lexical order than ["JFK", "LGB"].
  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"]



0 0
原创粉丝点击