力扣-回溯-332 重新安排行程
思路
要完成对当前机场和目标机场的数据定义,要用出发机场映射到目标机场,而且出发机场可能有多个,所以要使用unordered_map作为外部容器,由于同一个出发机场到目标机场,需要先到string小的目标机场尝试,所以用map记录目标机场以及当前航班的次数
回溯时,先从字母序小的机场开始尝试,一旦获取到一个结果后就返回true,让剩下的回溯不再进行。
代码
class Solution {
public:
    vector<string> result;
    unordered_map< string, map<string, int> > targets;
    bool backtracking(int tickNum){
        if(result.size() == tickNum + 1){
            return true;
        }
        for(pair< const string, int> &target : targets[result[result.size()-1]]){
            if(target.second > 0){
                result.push_back(target.first);
                target.second--;
                if( backtracking(tickNum)) return true;
                result.pop_back();
                target.second++;
            }
        } 
        return false;
    }
    vector<string> findItinerary(vector<vector<string>>& tickets) {
        for( const vector<string> vec: tickets){
            targets[vec[0]][vec[1]]++;
        }
        result.push_back("JFK");
        backtracking(tickets.size());
        return result;
    }
}; 
                