哎,想到了优先级队列也想到了dfs,但是没想到怎么处理dfs结尾,欧拉路径这个属实是学到了:重新安排行程 - 重新安排行程 - 力扣(LeetCode)
Hierholzer 算法
【图论】什么是欧拉图?如何求欧拉路径?_LiBer_CV的博客-CSDN博客
class Solution {
public:
vector<string> res;
//使用优先级队列,小顶堆
unordered_map<string, priority_queue<string, vector<string>, greater<string>>> adj;
vector<string> findItinerary(vector<vector<string>>& tickets) {
for(const auto &v : tickets) adj[v[0]].emplace(v[1]);
dfs("JFK");
reverse(res.begin(), res.end());
return res;
}
void dfs(const string src){
while(adj.count(src) && !adj[src].empty()){
auto str = adj[src].top();
adj[src].pop();
dfs(str);
}
res.push_back(src);
}
};
普通的dfs,其实一开始也想到了使用带返回值的dfs,但是退出条件还是没处理好