码迷,mamicode.com
首页 > 其他好文 > 详细

332. Reconstruct Itinerary

时间:2016-07-10 07:36:55      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

    /*
     * 332. Reconstruct Itinerary 
     * 2016-3-14 by Mingyang
     * 这道题给我们一堆飞机票,让我们建立一个行程单,如果有多种方法,取其中字母顺序小的那种方法。
     * 这道题的本质是有向图的遍历问题,那么LeetCode关于有向图的题只有两道Course Schedule和Course Schedule II,
     * 而那两道是关于有向图的顶点的遍历的,而本题是关于有向图的边的遍历。!!!!!!!!!!!!!!!!!!
     * 每张机票都是有向图的一条边,我们需要找出一条经过所有边的路径,那么DFS是我们的不二选择。
     * 代码前半段都在准备工作。把所有的tickets全部装进一个map,string对应了一个priority queue
     * 后半段dfs中,找出第一个顺序的结果。最终输出是从最后一个开始,一个一个往前退的情况下addFirst加起来的
     * 关键点:记住,我们这里是一个一个往后退的!!
     */
    HashMap<String, PriorityQueue<String>> map = new HashMap<String, PriorityQueue<String>>();
    LinkedList<String> result = new LinkedList<String>();
    public List<String> findItinerary(String[][] tickets) {
        for (String[] ticket : tickets) {
            if (!map.containsKey(ticket[0])) {
                PriorityQueue<String> q = new PriorityQueue<String>();
                map.put(ticket[0], q);
            }//用PQ代表了一个顺序
            map.get(ticket[0]).offer(ticket[1]);
        }
        dfs("JFK");
        return result;
    }
    public void dfs(String s) {
        PriorityQueue<String> q = map.get(s);
        while (q != null && !q.isEmpty()) {
            dfs(q.poll());
        }
        result.addFirst(s);
    }

 

332. Reconstruct Itinerary

标签:

原文地址:http://www.cnblogs.com/zmyvszk/p/5657056.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!