332. 重新安排行程 DFS欧拉回路
程序员文章站
2022-04-24 14:04:10
...
332. 重新安排行程
难度:中等
好几天前的每日一题,偷懒今天才写
题目描述
解题思路
主要思想大概是先建图,然后从起点开始dfs吗,但是和传统回溯不同,在递归到最后的时候才把这次结果加入到结果集合里,并且要逆序插入
/*
* 332. 重新安排行程
* 2020/8/27
* medium
*/
public List<String> findItinerary(List<List<String>> tickets) {
Map<String, PriorityQueue<String>> graph = new HashMap<>();
List<String> res = new LinkedList<>();
if(tickets == null || tickets.size() == 0) {
return res;
}
for (List<String> pair : tickets) {
String from = pair.get(0);
String to = pair.get(1);
PriorityQueue<String> nbr = graph.computeIfAbsent(from, k -> new PriorityQueue<>());
nbr.add(to);
}
dfsFindItinerary(graph,"JFK",res);
return res;
}
//DFS方式遍历图
public void dfsFindItinerary(Map<String, PriorityQueue<String>> graph,String src,List<String> res) {
PriorityQueue<String> next = graph.get(src);
while(next != null && next.size() != 0) {
//选择一个最小的出队,因为要不重复,所以遍历完删掉这个
String dst = next.poll();
dfsFindItinerary(graph,dst,res);
}
//逆序插入
res.add(0,src);
}