力扣-回溯-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;
}
};