寻找欧拉路,可以不是欧拉回路当然差别也就只是收尾相连那一下 每遍历到一条边就把这条边删去,并且采取逆序的方式直到该结点(可重复)出口已经遍历完才将该结点入列,最终结果vector记录的仍然是每一次的结点(可能带环)
//Hierholzer算法
class Solution {
public:
unordered_map<string, priority_queue<string, vector<string>, std::greater<string>>> vec;
vector<string> res;
void dfs(string str) {
while (vec.find(str) != vec.end() && !vec[str].empty()) {
string temp = vec[str].top();
vec[str].pop();
dfs(temp);
}
stk.push_back(str);
}
vector<string> findItinerary(vector<vector<string>>& tickets) {
for (auto& it : tickets) {
vec[it[0]].emplace(it[1]);
}
dfs("JFK");
reverse(stk.begin(), stk.end());
return stk;
}
};