目录
题目:
代码(首刷看解析 2024年2月6日):
class Solution {
private:
unordered_map<string,map<string,int>> targets;
public:
bool backtracking(int tickNum, vector<string>& res) {
if (tickNum == res.size() - 1) {
return true;
}
for (pair<const string,int>& target : targets[res[res.size() - 1]]) {
if (target.second > 0) {
res.push_back(target.first);
target.second--;
if (backtracking(tickNum, res)) return true;
target.second++;
res.pop_back();
}
}
return false;
}
vector<string> findItinerary(vector<vector<string>>& tickets) {
targets.clear();
vector<string> res;
for (const vector<string>& vec : tickets) {
targets[vec[0]][vec[1]]++;
}
res.push_back("JFK");
backtracking(tickets.size(), res);
return res;
}
};
代码(二刷自解 2024年5月23日)
81个测试用例过了80个,有一个过不了,这个题差不多写了40多分钟?
class Solution {
private:
vector<string> res;
vector<string> path;
void backtracking(unordered_map<string, vector<string>>& umap, string source, int size) {
if (path.size() > size + 1) return;
if (size == path.size() - 1) {
res = path;
return;
}
for (int i = 0; i < umap[source].size(); i++) {
if (!res.empty()) break;//剪枝
if (umap[source][i] == " ") continue;//避免死循环
auto target = umap[source][i];
path.push_back(target);
umap[source][i] = " ";
backtracking(umap, target, size);
umap[source][i] = target;
path.pop_back();
}
}
public:
// DFS:
vector<string> findItinerary(vector<vector<string>>& tickets) {
unordered_map<string, vector<string>> umap;
for (int i = 0; i < tickets.size(); i++) {
umap[tickets[i][0]].push_back(tickets[i][1]);
}
for (auto& it : umap) {
sort(it.second.begin(), it.second.end());
}
path.push_back("JFK");
backtracking(umap, "JFK", tickets.size());
return res;
}
};
过不了的测试用例:
[["JFK","SFO"],["JFK","ATL"],["SFO","JFK"],["ATL","AAA"],["AAA","BBB"],["BBB","ATL"],["ATL","AAA"],["AAA","BBB"],["BBB","ATL"],["ATL","AAA"],["AAA","BBB"],["BBB","ATL"],["ATL","AAA"],["AAA","BBB"],["BBB","ATL"],["ATL","AAA"],["AAA","BBB"],["BBB","ATL"],["ATL","AAA"],["AAA","BBB"],["BBB","ATL"],["ATL","AAA"],["AAA","BBB"],["BBB","ATL"],["ATL","AAA"],["AAA","BBB"],["BBB","ATL"],["ATL","AAA"],["AAA","BBB"],["BBB","ATL"],["ATL","AAA"],["AAA","BBB"],["BBB","ATL"],["ATL","AAA"],["AAA","BBB"],["BBB","ATL"],["ATL","AAA"],["AAA","BBB"],["BBB","ATL"],["ATL","AAA"],["AAA","BBB"],["BBB","ATL"],["ATL","AAA"],["AAA","BBB"],["BBB","ATL"],["ATL","AAA"],["AAA","BBB"],["BBB","ATL"],["ATL","AAA"],["AAA","BBB"],["BBB","ATL"],["ATL","AAA"],["AAA","BBB"],["BBB","ATL"],["ATL","AAA"],["AAA","BBB"],["BBB","ATL"],["ATL","AAA"],["AAA","BBB"],["BBB","ATL"],["ATL","AAA"],["AAA","BBB"],["BBB","ATL"],["ATL","AAA"],["AAA","BBB"],["BBB","ATL"],["ATL","AAA"],["AAA","BBB"],["BBB","ATL"],["ATL","AAA"],["AAA","BBB"],["BBB","ATL"],["ATL","AAA"],["AAA","BBB"],["BBB","ATL"],["ATL","AAA"],["AAA","BBB"],["BBB","ATL"],["ATL","AAA"],["AAA","BBB"],["BBB","ATL"]]