332. 重新安排行程
题目链接:332. 重新安排行程
代码如下:
//回溯
//参考:https://www.programmercarl.com/0332.%E9%87%8D%E6%96%B0%E5%AE%89%E6%8E%92%E8%A1%8C%E7%A8%8B.html#%E6%80%9D%E8%B7%AF
class Solution {
public:bool backtracking(int ticketNum){if(res.size()==ticketNum+1) return true;for(pair<const string,int>&target:targets[res[res.size()-1]]){if(target.second>0)// 记录到达机场是否飞过了{res.emplace_back(target.first);target.second--;if(backtracking(ticketNum)) return true;//递归res.pop_back();//回溯target.second++;}}return false;}vector<string> findItinerary(vector<vector<string>>& tickets) { for(const vector<string>& vec:tickets){targets[vec[0]][vec[1]]++;// 记录映射关系}res.emplace_back("JFK");// 起始机场backtracking(tickets.size());return res;}
public:// unordered_map<出发机场, map<到达机场, 航班次数>> targetsunordered_map<string, map<string, int>> targets;vector<string> res;
};