• leetcode332


    Hierholzer算法
    https://taodaling.github.io/blog/2019/04/25/Hierholzer%E7%AE%97%E6%B3%95/
    https://www.cnblogs.com/vocaloid01/p/9514023.html
    https://www.jianshu.com/p/8394b8e5b878

    332方法1dfs
    class Solution {
    public:
        vector<string> findItinerary(vector<vector<string>>& tickets) {
            vector<string> ret;
            unordered_map<string,multiset<string>> graph=buildGraph(tickets);
            string jfk = "JFK";
            //cout<<typeid(jfk).name()<<endl; 
            //stdout:NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
            //cout<<typeid("JFK").name()<<endl;
            //stdout:A4_c
            //dfs(graph,"JFK",ret);报错no matching member function for call to 'dfs'
            dfs(graph,jfk,ret);
            return vector<string>(ret.rbegin(),ret.rend());
        }
        private:
        //typedef vector<string,multiset<string>> Graph;
        template <typename T>
        unordered_map<T,multiset<T>> buildGraph(vector<vector<T>>& tickets) {
            unordered_map<T,multiset<T>> g;
            for(auto ticket:tickets){
                g[ticket[0]].insert(ticket[1]);
            }
            return g;
        }
        template <typename T>
        void dfs(unordered_map<T,multiset<T>>& _graph,T _t,vector<T>& _ret){
            while(_graph[_t].size()){
                T t=*_graph[_t].begin();
                _graph[_t].erase(_graph[_t].begin());
                dfs(_graph,t,_ret);
            }
            _ret.push_back(_t);
        }
    };

    332方法2while

    class Solution {
    public:
        vector<string> findItinerary(vector<vector<string>>& tickets) {
            vector<string> ret;
            unordered_map<string,multiset<string>> graph=buildGraph(tickets);
            stack<string> sta{{"JFK"}};
            while(!sta.empty()){
                string tmp=sta.top();
                if(graph[tmp].empty()){
                    ret.insert(ret.begin(), tmp);
                    sta.pop();
                    
                }else{
                    sta.push(*graph[tmp].begin());
                    graph[tmp].erase(graph[tmp].begin());
                }
                
            }
            return ret;
        }
        private:
        template <typename T>
        unordered_map<T,multiset<T>> buildGraph(vector<vector<T>>& tickets) {
            unordered_map<T,multiset<T>> g;
            for(auto ticket:tickets){
                g[ticket[0]].insert(ticket[1]);
            }
            return g;
        }
    };
  • 相关阅读:
    查看表中bytea类型的字段内容
    Js中生成32位随机id
    VS Code操作指南
    记录一次非常简单的Win10安装
    Typora中下载并安装主题
    Win 10下隐藏任务栏图标B & O Play Audio Control
    IDEA基本使用
    Eclipse中安装反编译器(中文版)
    Eclipse设置控制台不自动弹出
    解决Eclipse控制台中文乱码的情况
  • 原文地址:https://www.cnblogs.com/Babylon/p/14648560.html
Copyright © 2020-2023  润新知