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;
        }
    };
  • 相关阅读:
    JSP页面间传递参数
    JSP获取当前日期时间
    jsp实现套打(发票打印)
    iframe
    HTTP状态码及含义大全
    标签 -- HTML内联框架
    jstl fmt标签详解
    button和submit的区别及使用js实现页面跳转的方式
    Idea SpringBoot 启动Eurka 报错,提示端口被占用
    CodeSmith 破解
  • 原文地址:https://www.cnblogs.com/Babylon/p/14648560.html
Copyright © 2011-2022 走看看