332. 重新安排行程(欧拉图,欧拉回路,Hierholzer 算法)

class Solution {
    LinkedList<String> res = new LinkedList<>();
    Map<String,PriorityQueue<String>> map = new HashMap<>();
    public List<String> findItinerary(List<List<String>> tickets) {
        for(List<String> t : tickets) {
            String f = t.get(0), to = t.get(1);
            map.computeIfAbsent(f,k->new PriorityQueue<String>()).add(to);
        }
        dfs("JFK");
        return res;
    }
    public void dfs(String curr) {
        while (map.containsKey(curr) && !map.get(curr).isEmpty()) {
            String tmp = map.get(curr).poll();
            dfs(tmp);
        }
        res.addFirst(curr);
    }
    // [["JFK","KUL"],["JFK","NRT"],["NRT","JFK"]]
}

 

posted @ 2020-08-27 10:13  Sexyomaru  阅读(140)  评论(0编辑  收藏  举报