欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

332. 重新安排行程 DFS欧拉回路

程序员文章站 2022-04-24 14:04:10
...

332. 重新安排行程

难度:中等
好几天前的每日一题,偷懒今天才写
题目描述
332. 重新安排行程 DFS欧拉回路

解题思路
332. 重新安排行程 DFS欧拉回路
332. 重新安排行程 DFS欧拉回路
主要思想大概是先建图,然后从起点开始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);
						 
					 }

332. 重新安排行程 DFS欧拉回路

相关标签: 力扣刷题笔记