• 重新安排行程


    给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序。所有这些机票都属于一个从JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 出发。

    说明:

    如果存在多种有效的行程,你可以按字符自然排序返回最小的行程组合。例如,行程 ["JFK", "LGA"] 与 ["JFK", "LGB"] 相比就更小,排序更靠前
    所有的机场都用三个大写字母表示(机场代码)。
    假定所有机票至少存在一种合理的行程。
    示例 1:

    输入: [["MUC", "LHR"], ["JFK", "MUC"], ["SFO", "SJC"], ["LHR", "SFO"]]
    输出: ["JFK", "MUC", "LHR", "SFO", "SJC"]
    示例 2:

    输入: [["JFK","SFO"],["JFK","ATL"],["SFO","ATL"],["ATL","JFK"],["ATL","SFO"]]
    输出: ["JFK","ATL","JFK","SFO","ATL","SFO"]
    解释: 另一种有效的行程是 ["JFK","SFO","ATL","JFK","ATL","SFO"]。但是它自然排序更大更靠后。

    code:先构造邻接表,然后dfs邻接表,递归到最小子问题时添加进res,此时的res与行程正好相反。

    class Solution {
    private:
        void dfs(string& from,unordered_map<string,multiset<string>>& adjcent,vector<string>& res)
        {
            while(adjcent[from].size()>0)
            {
                string next=*adjcent[from].begin();
                adjcent[from].erase(adjcent[from].begin());
                dfs(next,adjcent,res);
            }
            res.push_back(from);
            return ;
        }
    public:
        vector<string> findItinerary(vector<vector<string>>& tickets) {
            if(tickets.empty()||tickets[0].empty())
                return {};
    
            unordered_map<string,multiset<string>> adjcent;
            for(const auto& t:tickets)
            {
                adjcent[t[0]].insert(t[1]);
            }
    
            vector<string> res;
            string from("JFK");
            dfs(from,adjcent,res);
            return vector<string>(res.rbegin(),res.rend());
        }
    };
  • 相关阅读:
    修改boot.ini产生彩色的启动菜单
    五行山下的猴子
    一个中文输入的类
    黑洞
    驱动中 定时
    水煮TCPMP (转)
    OGame的建筑说明
    3D数学 矩阵的更多知识(1)
    OGame银河系说明
    七则很有启迪性的心理寓言【转】
  • 原文地址:https://www.cnblogs.com/tianzeng/p/12503306.html
Copyright © 2020-2023  润新知