zoukankan      html  css  js  c++  java
  • 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;
        }
    };
  • 相关阅读:
    Camera光学、成像和 3A 算法 (视觉),camera开发
    VS编程常见的编译和链接错误
    python文档下载
    如何使用微信小程序云函数发送短信验证码
    微信小程序发送短信验证码完整实例
    微信小程序如何发送短信验证码,无需搭建服务器
    微信小程序60秒倒计时
    发送短信验证码后60秒倒计时
    java实现注册的短信验证码
    java + maven 实现发送短信验证码功能
  • 原文地址:https://www.cnblogs.com/Babylon/p/14648560.html
Copyright © 2011-2022 走看看